on
BufferedReader와 Scanner
BufferedReader와 Scanner
BufferedReader와 Scanner 두 클래스 모두 문자열을 입력받는 데 사용된다.
BufferedReader의 특징
BufferedReader는 JDK 1.1부터 있엇고 InputStreamReader에 버퍼링 기능이 추가된 Class이다.
실제로 코딩 작성할 때를 보면 BufferedReader에 InputStreamReader가 들어가 있는 것을 볼 수 있다.
InputStreamReader는 문자열을 Character 단위(한 글자 단위)로 읽어 들인다.
한 글자씩 문자열을 읽어들이면 길이가 긴 문자열을 읽어 들일 때 불편하고 비효율적이기 때문에
이 점을 보완하고자 BufferedReader가 존재한다.
BufferedReader는 사용자가 요청할 때마다 데이터를 읽어 오는 것이 아닌 일정한 크기의 데이터를 한번에 읽어와 버퍼에 보관한 후, 사용자의 요청이 있을 때 버퍼에서 데이터를 읽어오는 방식으로 동작한다.
위의 그림처럼 버퍼를 사용하여 버퍼에서 데이터를 읽어오기 때문에 속도가 향상되고 시간 부하가 적다는 장점이 있다.
BufferedReader는 입력을 라인단위로 입력 받기 때문에 공백의 경우에도 String으로 인식하여 받아들이고 입력받은 데이터 타입이 String 타입이므로 다른 타입의 데이터라면 이후 형변환이 필요하다.
동기화를 사용하기 때문에 여러 스레드(thread)간에 BufferedReader개체를 공유할 수 있다.
Scanner의 특징
Scanner는 JDK 1.5부터 생겼고 java.util 패키지 내에 포함된 Class이다.
공란과 줄바꿈을 모두 입력값의 경계로 인식하기 때문에 좀 더 쉽게 데이터를 입력받을 수 있도록 해준다.
또한, 데이터 타입이 입력 받는 시점에서 결정되므로 별도의 Casting이 필요하지 않다. 정수 값으로 int, short, long 소수 값으로 float, double을 구분지어 읽어들일 수 있고 String값도 읽을 수 있다. 식의 경우도 nextInt(), nextLong(), nextShort(), nextFloat(), nextDouble()과 같은 함수들을 사용한다.
Scanner는 BufferedReader보다 속도가 느리지만 1024(1KB)의 버퍼 사이즈를 가지고 있어 내용이 짧을 경우 Scanner를 사용하는 것이 좋다. 또한 Scanner는 BufferedReader와 다르게 IOException을 숨깁니다.
BufferedReader와 Scanner의 차이 요약
1. BufferedReader는 8KB(8192)의 버퍼사이즈를 가지고 Scanner는 1KB(1024)의 버퍼사이즈를 가진다.
2. BufferedReader는 문자열 파싱기능이 없고 String으로만 받아 들일 수 있지만 Scanner는 문자열 파싱기능이 있고 다양하게 구분지어 읽어 들일 수 있다.
3. BufferedReader의 경우는 동기화를 사용하지만 Scanner는 사용하지 않는다.
4. BufferedReader가 single thread를 사용하는 Scanner보다는 약간 느리지만 보통 BufferedReader가 더 빠르게 문자열을 읽을 수 있고 속도가 빠르다.
알고리즘 코딩 결과로 보는 속도 차이
1. 알고리즘 문제를 Scanner를 이용해서 풀었을 때
2. BufferedReader를 이용해서 풀었을 때
BufferedReader를 사용했을 때 76ms의 시간이 걸리고 Scanner를 사용했을 때 112ms로 BufferedReader를 사용했을 때 더 빠른 것을 볼 수 있다.
내용 참고 : 1. https://friends-aihaja.tistory.com/entry/1-BufferReader-VS-Scanner-%EC%B0%A8%EC%9D%B4%EC%A0%90
2. https://carpediem0212.tistory.com/11
공유하기 글 요소 저작자표시
from http://chobojonghyun.tistory.com/6 by ccl(A) rewrite - 2021-10-24 21:27:43