Scanner와 BufferedReader

imssu·2024년 3월 10일
post-thumbnail

학교에서 java를 배울 때 Scanner를 주로 사용해왔기 때문에,
백준을 풀 때도 입력받는 클래스는 Scanner만 사용했다.

그런데, Scanner보다 BufferedReader를 사용하는게 속도가 더 빠르다는 소리를 들어서 BufferedReader에 대해 알아볼까 한다.


Scanner

먼저, Scanner는 원래 알다시피 공백과 개행문자를 기준으로 입력을 받는다. 그리고 nextInt(),nextLine() 등 원하는 자료형으로 입력을 받을 수 있다.
참고로 버퍼 사이즈는 1024 char이라고 한다.

  • 사용법
Scanner sc = new Scanner(System.in);

x = sc.nextInt();

BufferedReader

반면에, BufferedReader은 개행문자만을 기준으로 입력을 받고 메소드는 nextLine()을 사용한다. 자료형은 String으로 고정되기 때문에 입력 데이터를 원하는 형태로 바꿔야 하는 과정이 필요하다.

  • 사용법
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//문자열
String s = br.readLine();

//공백기준 분리(StringTokeniger)
StringTokenizer st = new StringTokenizer(br.readLine());
String s1 = st.nextToken();
string s2 = st.nextToken();

//공백기준 분리(split)
String arr[] = s.split();

//정수형
int n = Integer.parseInt(br.readLine());

BufferedReader를 사용할 때 알아야 할 점이 하나 더 있는데, 그것은 예외처리이다. try/catch나 throws IOExeption을 통해 예외처리를 꼭 해주어야 한다.

그리고 BufferedReader의 버퍼 사이즈는 8192 char로 입력이 많다면 Scanner보다 유리하다.

Scanner와 BufferedReader는 스레드 동기화에서도 차이가 있다. Scanner는 스레드 동기화를 하지 않기 때문에 멀티 스레드에서 안전하지 않지만 BufferedReader는 멀티 스레드 환경에서 내부적으로 동기화를 하기 때문에 안전하게 사용할 수 있다는 점이다.


이렇게 간단하게 Scanner와 BufferedReader의 차이점에 대해 알아보았다. BufferedReader를 사용하면서 속도가 얼마나 더 빠른지 체크해봐야겠다.

profile
안녕하세요!

0개의 댓글