본문 바로가기

Java

[Java] BufferedInputStream 와 BufferedReader

 

프로그램의 실행 성능은 입출력이 가장 늦은 장치를 따라간다. 

CPU와 메모리가 아무리 뛰어나도 하드 디스크의 입출력이 늦어지면 프로그램의 실행 성능은 하드 디스크의 처리 속도에 맞춰진다.

 

네트워크로 데이터를 전송할 때도 마찬가지다. 느린 네트워크 환경이라면 컴퓨터 사양이 아무리 좋아도 메신저와 게임의 속도는 느릴 수밖에 없다. 이 문제에 대한 완전한 해결책은 될 수 없지만, 프로그램이 입출력 소스와 직접 작업하지 않고 중간에 메모리 버퍼(buffer)와 작업함으로써 실행 성능을 향상시킬 수 있다.

 

예를 들어 프로그램은 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 쓰기 속도가 향상된다.

버퍼는 데이터가 쌓이기를 기다렸다가 꽉 차게 되면 데이터를 한꺼번에 하드디스크로 보냄으로써 출력 횟수를 줄여준다.

 

보조 스트림 중에서는 위와 같이 메모리 버퍼를 제공하여 프로그램의 실행 성능을 향상시키는 것들이 있다.

바이트 기반 스트림에는 BufferedInputStream, BufferedOutputStream 이 있고,

문자 기반 스트림에는 BufferedReader, BufferedWriter가 있다.

 

BufferedReader는 readLine() 메소드를 추가적으로 더 가지고 있는데, 이 메소드를 이용하면 \r , \n 으로 구분된 행 단위의 문자열을 한꺼번에 읽을 수 있다. 다음 코드는 Enter 키를 입력하기 전까지 콘솔에서 입력한 모든 문자열을 한꺼번에 얻는다.

 

 

* 위에 동그라미 친 부분이 버퍼 스트림을 생성하는 부분이다.