Scanner VS BufferedReader

2024. 9. 6. 02:07·자바

1. Scanner

Scanner는 띄어스기와 개행문자를 경계로 값을 입력하기 때문에 따로 가공할 필요가 없다.

지원하는 메소드가 많기 때문에 원하는 데이터로 바로 가공할 수 있다.

버퍼 사이즈가 1024B = 1KB 이므로 많은 입력을 사용하는 경우 성능 상 좋지 못한 결과를 야기한다. (이로 인해 알고리즘 문제를 풀 때 시간초과가 발생할 수 있다.)

 

2. BufferedReader

BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터를 String 으로 고정한다.

따라서 추가적인 가공 작업이 필요하다. 

버퍼 사이즈가 8192B = 8KB 이므로 입력 데이터가 많은 경우 성능 상 이점을 챙길 수 있다.

 

3. BufferedReader 를 사용할 때와 Scanner의 속도가 차이가 나는 이유

버퍼를 사용하지 않는 입력은 키보드를 누르는 즉시 바로 전달되어 속도가 느리다. 버퍼를 사용한 입력은 버퍼에 보관해 두고 가득 차거나, 개행 문자가 나타났을 때 버퍼의 내용을 한 번에 전송하여 속도가 빠르다. BufferedReader 의 버퍼 사이즈는 8KB 이고 Scanner 의 버퍼 사이즈는 1KB 이므로 버퍼의 사이즈 때문에 둘의 속도차가 발생한다.

 

4. 또 다른 차이는?

  • BufferedReader 의 경우 동기화를 사용하여 멀티쓰레드 환경에서 안전하게 수행된다. Scanner는 동기화를 사용하지 않아 멑티 쓰레드 환경에서 안전하게 수행되지 못한다. 동기화를 사용하기 때문에 BufferedReader 가 더 느리지 않냐고 반문할 수 있으나 버퍼 사이즈 크기의 영향을 넘지 못한다.
  • BufferedReader 는 CheckedException 을 발생시키기 때문에 예외 처리가 필수이다. Scanner 는 UnCheckedException이므로 예외 처리를 생략할 수 있다.

5. 사용법

Scanner

Scanner scanner = new Scanner(System.in);

scanner.next(); // 버퍼에 입력된 문자에서 문자나 문자열에서 공백 전까지의 단어를 읽는다. 개행문자를 가져오지 않는다.
scanner.nextLine(); // 문자 또는 엔터를 치기 전까지의 문장 전체를 입력받는다. 개행 문자도 읽어온다.
scanner.nextInt();
scanner.nextDouble();

BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine(); // 문장 전체로 읽어온다.

StringTokenizer st = new StringTokenizer(input);
int val1 = Integer.parseInt(st.nextToken());
int val2 = Integer.parseInt(st.nextToken());

6. 참고 자료

https://friends-aihaja.tistory.com/entry/1-BufferReader-VS-Scanner-%EC%B0%A8%EC%9D%B4%EC%A0%90

https://juno-juno.tistory.com/99

 

'자바' 카테고리의 다른 글

자바 자료구조  (4) 2025.08.06
String 클래스  (0) 2024.09.09
'자바' 카테고리의 다른 글
  • 자바 자료구조
  • String 클래스
khw7385
khw7385
khw7385 님의 블로그 입니다.
  • khw7385
    khw7385 님의 블로그
    khw7385
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 코딩테스트 (7)
      • 자바 (3)
      • 스프링 (3)
      • cs (7)
        • 자료구조 (3)
        • 알고리즘 (1)
        • 객체지향 (3)
      • 개발일지 (6)
        • 트러블슈팅 (1)
      • 데이터베이스 (3)
        • Redis (2)
        • MySQL (1)
      • 기타 (2)
      • devops (6)
      • LG CNS AM INSPIRE (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khw7385
Scanner VS BufferedReader
상단으로

티스토리툴바