취미처럼

[JAVA] BufferedReader vs Scanner 본문

JAVA/이론

[JAVA] BufferedReader vs Scanner

sirius 2021. 4. 13. 09:44

Buffer : 임시저장공간

 

속도가 빠른 장치에서 들어오는 모든 데이터를 잠시 저장해놓고 버퍼가 꽉 차거나

특정 커맨드를 입력받았을 때 일괄적으로 내보내고 버퍼를 초기화시킨다.

즉, 속도가 느린 장치에서 일을 여러번 하지 않도록 속도가 빠른 장치에서 미리미리 처리해두고,

버퍼라는 임시 공간에 보관해두었다가 한번에 넘겨주는 것

데이터를 가져올 때 속도가 느린 장치로 인해 속도가 빠른 장치가 일을 쉬는 것을 방지하여 빠르고 안정적인 퍼포먼스를 내게 함

 

Cache : 데이터 값을 복사해 놓는 임시장소

 

데이터를 사용 후에도 저장해놓고, 한번 접했던 데이터는 다시 접근할 때 굳이 속도가 느린 장치에 엑세스하지 않고

캐시에 있는 데이터를 가져올 수 있도록 하는 것

 

BufferedReader 

 

버퍼링을 제공해주는 보조스트림 라이브러리

 

Scanner

 

파라미터에 담긴 스트림에 따라 오버로딩을 통해 Scanner의 메서드를 사용하기 위한 스트림 형태로 변경해주는 편의를 제공하는 라이브러리

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
Scanner sc = new Scanner(new FileReader("input.txt"));

 

부가설명

 

노드스트림은 하나의 스트림에 주축을 이루는 요소이고, 보조스트림은 이 노드스트림을 통해 들어오거나 나가는 데이터를 잘 처리하여 효율적으로 사용하기 위한 일종의 플러그인

Scanner와 BufferedReader의 파라미터에 들어가는 것들은 스트림이다.

모든 스트림은 데이터 타입(Char 또는 Byte), 방향(Input 또는 Output)에 따라 결정되며,

노드 스트림은 추가적으로 노드 타입(File 또는 키보드 등)에 따라 결정되고 보조 스트림은 기능에 따라 결정된다.

노드스트림 : FileInputStream, FileReader

보조스트림 : BufferedReader, InputStreamReader

stream : byte로 반환

reader : char로 반환

BufferedReader는 보조스트림으로써 char 데이터를 반환

but, BufferedReader는 보조스트림이기 때문에 직접적으로 데이터를 char 형태로 받지 못하고, 이전의 데이터가 char 형태로 넘어와야 버퍼링을 적용하여 반환할 수 있다.

이대 사용되는 것이 InputStreamReader이다. InputStream > Reader로 변환 (byte > char형태로 변환)

 

성능차이

 

Scanner는 오버로딩을 통해 어떤 형태의 스트림이든 내부적으로 처리 가능

데이터 타입을 정규식을 통해 검증하고 변환하는 과정에서 추가적인 시간 소모

버퍼 기능이 없기 때문에 입력이 발생하면 즉시 전달하여 I/O 발생

 

 

 

Comments