BufferedReader
정의
Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. (BufferedReader : https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html)
BufferedReader는 character input stream으로부터 문자를 읽는다.
문자와 배열, 문자열 한 줄을 효율적으로 읽을 수 있도록 문자를 버퍼링한다.
생성자

사용하는 방법
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));java
생성자를 보면 알 수 있듯 BufferedReader는 Reader를 wrapping하고 있다.
위의 코드에서는 Reader로 InputStreamReader를 사용했는데, InputStreamReader의 read() 메서드는 single character를 읽는다.
한 글자씩 읽기 때문에 입력이 많은 경우 InputStreamReader의 읽기 작업에는 많은 비용이 소요될 수 있는데, 이것 때문에 버퍼 기능을 사용할 수 있도록 BufferedReader로 wrapping하는 것이 더 효율적인 읽기 방법인 것이다.
(InputStreamReader : https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html)
사용 시 주의사항
1. BufferedReader는 input data를 파싱하지 않으므로 readLine()시 리턴값은 String이다.
- String이 아닌 다른 타입으로 변경하고 싶은 경우 형변환 필수
2. 예외처리 필수
i. readLine을 할 때마다 try & catch를 활용하여 예외처리
ii. throws IOException을 통한 예외처리 (이 방법을 더 많이 사용한다.)
Scanner 보다 나은 점
두 가지 면에서 Scanner보다 BufferedReader를 사용하기를 권장한다.
(1) 멀티스레드에서의 작업
- BufferedReader는 동기식으로 작업한다. 하지만 Scanner는 그렇지 않다.
- 따라서 멀티스레드 환경에서 작업한다면 BufferedReader를 사용해야 한다.
(2) 속도
- BufferedReader가 약간 더 빠르다.
- Scanner의 경우 읽기 작업 후 parsing을 수행하지만, BufferedReader는 단순히 읽기 작업만 수행하기 때문이다.
| Scanner | BufferedReader | |
| Buffer | 1KB char buffer | 8KB byte buffer |
| Parsing input data | O | X |
| Synchronous | X | O |
'Java' 카테고리의 다른 글
| 재미있는 ArrayList(와 TroubleShooting) (1) | 2023.05.31 |
|---|---|
| ArrayList가 add를 수행하는 방법 (0) | 2022.04.11 |
| GC Algorithms (0) | 2022.03.21 |