BufferedReader
사용이유
- 많은 양의 데이터를 입력 받을 경우 효율적인 면에서 Scanner보다 훨씬 낫다. (빠른 작업속도)
사용법
BufferedReader bf =new BufferedReader(new InputStreamReader(System.in); // 선언
String str = bf.readLine(); // String
int i = Integer.parseInt(bf.readLine()); // int
- readLine()은 리턴값을 String으로 고정하기 때문에 다른 타입을 입력하려면 형변환을 해주어야 한다.
- 예외처리를 해주어야한다.
throws IOXeception
Read한 데이터 가공
// StringTokenizer 인자값에 입력 문자열 넣음
StringTokenizer str = new StringTokenizer(s);
int num1 = Integer.parseInt(sc.nextToken()); // 첫 번째 호출
int num2 = Integer.parseInt(sc.nextToken()); // 두 번째 호출
String array[] = s.split(" "); // 공백마다 데이터를 끊어서 배열에 넣음
첫 번째 가공 방법
- StringTokenizer에 nextToken() 함수를 사용하여 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출
두 번째 가공 방법
- String.split() 함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식
BufferedWrite
사용이유
- 일반적으로는
System.out.println("");
을 사용하지만 많은 양의 출력에서는 BufferedWrite를 활용하는것이 속도적인 측면에서 좋다.
BufferedWriter 사용법
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터를 모두 출력
bw.close(); // 스트림을 닫음
- BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 반드시 flush() / close()를 호출해 뒤처리를 해야 함
- 자동 개행 기능(줄바꿈)이 없어 \n으로 수동처리 해주어야 한다.
사용예시
백준 15552번 문제
- 최대 1,000,000번의 A + B 계산식을 입,출력 받아야한다.
- Scanner, System.out.println()으로 실행할 경우 처리 속도가 느려 시간초과가 되니 BufferedReader, BufferedWriter를 사용해야 함.
// BufferedReader를 사용하기 위한 import
import java.io.*;
// 한 줄에 A, B 두가지 함수를 모두 받아야 하므로 StringTokenizer를 사용하여 한 줄에 입력 받은 후 공백을 기준으로 나눠 저장해야 함.
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter 선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
// StringTokenizer 선언
StringTokenizer st;
for(int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine(), " "); // StringTokenizer로 입력 받은 후
int A = Integer.parseInt(st.nextToken()); // 나눠서 저장
int B = Integer.parseInt(st.nextToken());
bw.write(A + B + "\n"); // bw는 자동 개행 기능이 없기 때문에 \n을 사용해 수동 줄바꿈을 해주어야 함.
}
bw.flush(); // 남은 모든 값을 출력
bw.close(); // bw 종료
}
}