본문 바로가기

전공지식/알고리즘

[알고리즘]Scanner vs BufferReader

콘솔 입출력에는 2가지 방법이 있다.

바로 BufferReader 와 Scanner 클래스를 이용하는 방법이다.

 

나온 순서는 BufferReader -> Scanner 순이다. (즉, 최신 클래스는 Scanner 클래스)

 

[사용 방법]

Scanner sc = new Scanner(System.in); BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

[차이점]

1.버퍼 크기 차이 (Scanner는 1024 chars, BufferReader는 8192 chars )

2.파싱의 차이 (BufferReader는 단순한 문자열을 읽고 저장하는 반면 Scanner는 파싱 기능이 있음)

3.동기화의 차이 (BufferReader는 동기화가 가능하지만 Scanner는 동기화가 되지 않음)

4.예외처리 (BufferReader는 즉시 IOException 처리를 하지만 Scanner는 숨긴다.)

 

 

1. 한번에 읽어 올 수 있는(버퍼링 할 수 있는) 크기의 차이 때문에 많은 데이터를 읽어올 경우 BufferReader가 좋다(속도차이도 당연히 있을 수 밖에 없음)

2. Scanner의 파싱하는 기능들이 많기 때문에 다양하게 사용할 수있음 (다만, 이로인해서 속도의 문제가 많이 생기는 것 같음)

3. BufferReader는 동기화가 가능하기때문에 멀티쓰레드에 안전하다.

4. BufferReader는 컴파일러 수준에서 예외처리가 나올 수 있기 때문에 따로 예외처리를 해야하는 반면 Scanner는 예외처리를 요구하지 않는다.

  --현재 BufferReader의 예외처리 요구는 없어진것인지 잘모르겠음 ... 특별히 개발하면서 보지는 않음

 

 

[속도차이]

 

출처 : 알고스팟
 

 

 

**Scanner의 next()와 nextLine() 쓸때의 주의점

http://sexy.pe.kr/tc/496