-
[Java] Scanner 와 BufferedReader의 차이점Java 2021. 11. 5. 13:45반응형
두 클래스는 모두 자바에서 입력을 받는 데 사용이 됩니다.
BufferedReader
우선 BufferedReader는 InputStreamReader에 버퍼링 기능이 추가된 Class입니다.
사용자가 요청할 때마다 데이터를 읽어 오는 것이 아닌 일정한 크기의 데이터를 한 번에 읽어와 버퍼에 보관한 후, 사용자의 요청이 있을 때 버퍼에서 데이터를 읽어오는 방식으로 동장 합니다.
입력받은 타입은 String 타입으로 공백의 경우에도 String으로 인식하여 받아들입니다.
InputStreamReader란?
문자열은 character 단위로 읽어 들입니다. 이는 긴 문자열을 읽을 때 비효율적이어서 이를 보완하고자 BufferedReader가 존재합니다.
Scanner
공백과 줄 바꿈을 모두 입력값의 경계로 인식하며, 데이터 타입이 입력받는 시점에서 결정되므로 별도의 형 변환이 필요하지 않습니다.
BufferedReader와 Scanner의 차이점
- Scanner(1024 chars)에 비해 BufferedReader(8192 chars)가 더 큰 Buffer Size를 가지고 있습니다. 따라서 긴 문자열이 포함된 파일을 읽을 때는 BufferedReader가 좋습니다.
- Scanner는 여러 가지 데이터 타입을 받을 수 있지만 BufferedReader는 String 값 밖에 받지 못합니다. 즉, Scanner는 문자열을 구분하여 분석하는 파싱이 가능합니다.
- BufferedReader의 경우 동기화를 사용하지만 Scanner는 사용하지 않습니다. BufferedReader는 동기화되므로 여러 스레드에서 안전하게 수행할 수 있습니다. 하지만 Scanner는 안전하지 않으므로 외부에서 동기화해야 합니다.
- BufferedReader는 I/O exception을 자체적으로 처리하지 못해서 throw 혹은 try ~ catch를 이용해야 하지만 Scanner 같은 경우에는 I/O exception을 자체적으로 처리합니다.
수행 시간 차이
다음 그림은 10,000,000 개의 정수를 입력받고 입력받은 정수의 합을 출력하는 코드의 입력방식에 대한 수행 시간의 차이입니다.
Scanner와 BufferedReader의 속도 차이 따라서 BufferedReader의 속도가 빠르다는 것을 알 수 있으며 앞으로 입력에서 BufferedReader를 사용하기로 결정했습니다.
BufferedReader 먼저 존재했는데 왜 Scanner는 등장하였을까?
int, double 등과 같은 여러 데이터 타입을 입력받는 가장 쉬운 방법으로 등장한 것 같으며 시간이 제약이 있는 시나리오에 대한 입력 방법을 원하는 경우에는 그다지 효율적이지 않다고 합니다.
즉, 여러 가지 데이터 타입을 받기 원해서 Scanner가 등장하게 되었습니다.
출처
https://friends-aihaja.tistory.com/entry/1-BufferReader-VS-Scanner-%EC%B0%A8%EC%9D%B4%EC%A0%90
1. BufferReader VS Scanner 차이점
BufferReader : from JDK 1.1 Scanneer : from JDK 1.5 1. Scanner 은 버퍼리더 보다 훨씬 활용적이다. 스캐너는 정수 값으로 int, short, long, 소수값으로 float,double를 구분지어 읽어들일 수 있고 String 값..
friends-aihaja.tistory.com
https://algospot.com/forum/read/2496/
algospot.com :: 자유게시판: 각 언어별 input method 비교
각 언어별 input method 비교 13개의 댓글이 있습니다.
algospot.com
https://www.geeksforgeeks.org/scanner-class-in-java/
Scanner Class in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
'Java' 카테고리의 다른 글
[Java] 공식문서 보는 법 (0) 2021.11.07 [Java] 자바 컬렉션 프레임워크(Java Collections Framework) (0) 2021.11.07 [Java] equals 와 ==의 차이점 (0) 2021.11.03 [Java] 자바의 Hello World (0) 2021.10.29 [Java] 자바의 특징 (0) 2021.10.29