
: BufferedReader는 문자 입력 스트림을 버퍼링하여 데이터를 읽는 데 사용됨. 버퍼를 사용하면 데이터를 한 문자씩 읽는 것보다 더 효율적이어서 입력 속도가 빨라짐.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
- InputStreamReader를 통해 바이트 기반 스트림(System.in)을 문자 기반 스트림으로 변환
- BufferedReader는 한 번에 많은 데이터를 읽어들인 후, 버퍼에 저장하여 필요할 때 꺼내 사용
- readLine() 메서드를 사용하여 한 줄씩 입력을 받을 수 있음
- br.readLine() : 한 줄의 문자열을 읽어 반환하고 입력이 끝나면 null을 반환함
- Scanner보다 빠른 입력 속도
- 온라인 저지에서 많은 양의 입력을 처리할 때 유용함
: BufferedWriter는 문자 출력 스트림을 버퍼링하여 데이터를 출력하는 데 사용됨. 버퍼를 사용하기 때문에 System.out.println보다 효율적
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write((A+B) + "\n");
- OutputStreamWriter를 통해 바이트 기반 스트림(System.out)을 문자 기반 스트림으로 변환
- BufferedWriter는 데이터를 버퍼에 쌓아두었다가 한꺼번에 출력
- "\n" : 개행 문자로, 한 줄씩 출력하기 위해 사용
- write() 를 호출해도 실제로 출력되지 않고, 버퍼에 쌓여 있다가 flush()가 호출되면 한꺼번에 출력
: flush() 메서드는 버퍼에 있는 데이터를 강제로 출력
- BufferedWriter는 데이터를 버퍼에 쌓아두었다가 한 번에 출력하기 때문에, 즉시 출력이 필요할 때 flush()를 사용함
- 반복문 내에서 flush()를 자주 호출하면 성능이 저하될 수 있으므로, 맨 마지막에 한 번만 호출하는 것이 좋음
- bw.flush()를 호출하면 그동안 write()로 버퍼에 쌓인 내용이 한꺼번에 출력됨
- 이 코드는 모든 출력을 한 번에 처리하여 시간을 절약함
- close() 메서드는 스트림을 닫고 시스템 자원을 해제함
- close()를 호출하면 더 이상 입력 또는 출력을 할 수 없음
- 자원을 반납하여 메모리 누수를 방지함
- bw.close()를 호출하여 BufferedWriter 스트림을 종료하고, 사용한 자원을 시스템에 반환
- br.close()도 마찬가지로 BufferedReader를 닫는 데 사용
- try-with-resources 문법을 사용하면 close() 호출을 생략할 수 있음