BufferedReader / BufferedWriter란?
BufferedReader와 BufferedWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수.
버퍼를 사용하지 않은 입력은 키보드 입력이 키를 누르는 즉시 바로 프로그램에 전달된다.
버퍼를 사용하는 입력은 키보드 입력이 있을 때마다 한 문자씩 버퍼로 전송한다.
버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한번에 프로그램에 전달한다.
둘다 기존의 Scanner와 System.out.println()보다 속도 측면에서 빠르기 때문에 많은 양의 데이터를 처리할 때 유리하다.
BufferedReader / BufferedWriter 사용법
import
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
BufferedReader 사용법
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine(); // String
int i = Integer.parseInt(br.readLine()); // Int
입력은 readLine()메소드를 사용한다.
※주의점
1. readLine()시 리턴값이 String으로 고정된다. String이 아닌 다른 타입으로 입력받으려면 형변환을 반드시 해줘야한다.
2. readLine()할 때마다 예외처리를 꼭 해줘야한다. 보통 try&catch 보다는 throwsIOExeption을 활용한다.
throw 이용 시
1) 클래스 import
import java.io.IOException;
2) main 클래스 옆에 throws IOExeption을 작성한다.
데이터 가공
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //첫번째 호출
int M = Integer.parseInt(st.nextToken()); //두번째 호출
//s = br.readLine();
String arr[] = s.split(" ");
BufferedReader를 통해 읽어온 데이터는 개행문자 단위(Line 단위)로 나누어진다.
만약 이를 공백 단위로 데이터를 가공하고자 하면 따로 작업을 해줘야 한다.
1번 방법: StringTokenizer의 nextToken() 함수를 쓰면 readLine()을 통해서 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다.
2번 방법: String.split() 함수를 사용하면 배열에 공백 단위로 끊어서 데이터를 저장하여 사용할 수 있다.
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언
bw.write(s);
bw.newLine();//줄바꿈
bw.flush(); //데이터 모두 출력
bw.close();
write(): 버퍼에 씀. (화면에 출력되는 것이 아니다!, 화면에 출려갛는 역할은 flush가 수행한다.)
newLine(): 개행 문자 역할
flush(): 남아있는 데이터 모두 출력. 스트림을 비움.
close(): 스트림을 닫음. 닫기 전 flush();
※주의점
BufferedWriter의 write()메서드를 통해 버퍼에 Int형을 넣고 싶으면 String형으로 변환이 필요하다.!
형 변환 없이 write()한 후 flush()를 하면 다음과 같이 오류가 뜬다.
공부한 내용으로 적은 백준 15552 문제 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(br.readLine()); //테스트케이스
for(int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
bw.write(a+b+"");
bw.newLine();
}
bw.flush();
bw.close();
}
}
https://www.acmicpc.net/problem/15552
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
참고
https://dev-note-97.tistory.com/58
[Java] BufferedWriter Int형 출력 / BufferedWriter 정수 출력
더보기 BufferedWriter 사용시 정수를 그대로 출력하려고 할 경우 다음과 같은 오류가 발생합니다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { Buffer..
dev-note-97.tistory.com
https://rlakuku-program.tistory.com/33
[Java] 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder
BufferedReader / BufferedWriter BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은, 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달된다..
rlakuku-program.tistory.com
https://m.blog.naver.com/ka28/221850826909
[JAVA] BufferedReader 와 Bufferedwriter 사용법
BufferedReader :Scanner와 유사. Bufferedwriter :System.out.println();과 유사 둘은 모두 기존에 ...
blog.naver.com
[알고리즘] 백준 15552 빠른 A+B Java
문제 정보플랫폼 : 백준분류 : 수학난이도 : 브론즈2링크 : https://www.acmicpc.net/problem/15552풀이이후에 풀이할 내용중에서 BufferedReader와 BufferedWriter라는 것을 사용할 때가 있다. 목적부터 말하자면,
velog.io
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 백준 11047 동전 0 JAVA 문제풀이(feat.더러운 코드) (0) | 2022.09.02 |
---|---|
[JAVA] 백준 1427 소트인사이드 문제풀이 및 개념 정리 (0) | 2022.09.01 |
[JAVA]텍스트 추출 방법과 Int로 변형하는 방법. (0) | 2022.02.03 |