BufferedReader 클래스는 입력된 데이터를 바로 전달하는 것이 아닌, 버퍼에 저장해두었다가 전달하는 방식의 클래스이다. BufferedReader 클래스는 Scanner와 다르게 문자열 String 밖에 읽지 못한다. 그럼에도 사용하는 경우는 BufferedReader 클래스가 Scanner 클래스에 비해 상당히 큰 버퍼를 차지하여 긴 문자열이 포함된 내용을 읽을때 사용되며, 데이터 양이 많을 경우에 하나하나씩 전달하는 Scanner보다 버퍼에 한 번에 모아서 전달하는 BufferedReader 클래스가 속도면에서 빠르고 효율적이기에 사용된다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // BufferedReader 선언
String s = br.readLine(); // 문자열 입력받아 s에 값을 할당
int num = Integer.parseInt(br.readLine()); // 문자열 int값으로 변환해줘야 함
readline()은 꼭 예외처리를 해줘야 하는데 try&catch 를 사용해도 되지만, 대부분 throws IOExeption로 예외처리를 해준다.
System.out.println() 방식과 같이 출력하는 클래스이고, BufferedWrite는 BufferedReader와 같이 많은 양을 출력할 때 속도면에서 효율적이다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out); // 선언
String str = br.readLine(); // 출력할 문자열
bw.write(str); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 버퍼에 남아있는 모든 데이터를 출력
bw.close(); // 스트림 닫기
백준 15552번 : 빠른 A+B 문제는 시간제한이 있었고 Scanner나 System.out.println을 이용하여 풀면 시간이 초과되어 BufferedReader와 BufferedWriter를 이용하여 풀었다.
import java.io.*;
import java.util.*;
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; // 테스트 케이스에서 주어지는 두 정수를 분리하기 위한tokenizer 선언
int num = Integer.parseInt(br.readLine());
for (int i = 0; i < num; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int sum = a + b;
bw.write(sum + "\n");
}
bw.flush();
bw.close();
}
}