Scanner & BufferedReader

Scanner와 BufferedReader 중에서 어느 것이 더 빠를까?

정답은! BufferedReader 승!

평균적으로 7배이상 빠르다. 왜냐하면 buffer 사용여부 때문!

 

Scanner는 1KB 크기의 버퍼를 갖기 때문에 입력이 바로 전달되지만,

BufferedReader는 8KB 크기의 버퍼를 가져 buffer에 입력들을 저장하였다가 한번에 전송한다.

Scanner는 입력을 읽는 과정에서 내부에서 정규표현식 적용, 입력값 분할, 파싱 과정 등을 거치기 때문에 속도가 느리다.

 

두 클래스에 공통적으로 생성할때 System.in을 매개별수로 받는다.

System.in은 java.lang.System 클래스의 인스턴스 변수로 InputStream 타입의 정적(static) 변수이다.

InputStream은 java.io 패키지의 최상위 입력 스트림 클래스이며 단독으로 입력을 받을 수 있음.

ex) int input = System.in.read();

 

 

Scanner

import java.util.Scanner;
...
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int n = sc.nextInt();
double d = sc.nextDouble();
float f = sc.nextFloat();
sc.close();

 

BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

...
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

System.out.println(st.countTokens());

while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}

 

이 글을 공유하기

댓글

Designed by JB FACTORY