판봉 개발 일기

성능 향상 보조 스트림 본문

자바 복습

성능 향상 보조 스트림

판봉 2021. 7. 15. 17:46
728x90

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

이건 몰랐는데 CPU나 메모리가 아무리 좋고 비싼걸 써도 하드 디스크의 입출력이 늦어지면 그만큼 실행이

하드 디스크의 처리속도에 맞춰진다고 합니다.

※내가 비싸게 샀던 CPU는 뭐가 되는거지...!

 

하지만 이 증상은 프로그램과 중간에 메모리 버퍼(buffer)와 작업하면 실행 성능을 향상 시킬 수가 있습니다.

버퍼는 데이터가 쌓이기를 기다렸다가 다 차면 데이터를 한번에 하드 디스크로 보냅니다.

그래서 출력 횟수가 줄어 드는 것입니다.

※살짝 어릴적에 뿌요뿌요 할때 한번에 모아서 보낼때 느낌이 떠올랐습니다..

 

기본적으로 출력 스트림은 내부에 작은 버퍼를 가지고 있지만은 너무나도 충분하지 않습니다.

그래서 보조 스트림 중에는 메모리 버퍼를 추가로 제공하는것이 있습니다.

BufferedInputStream, BufferedOutputStream, / BufferedReader, BufferedWriter

BufferedOutputStream and BufferedWriter

 

BufferedOutputStream은 바이트 기반 출력 스트림에 연결후 버퍼를 제공해주는 보조 스트림이고

BufferedWriter은 문자 기반 출력 스트림에 연결되어서 버퍼를 제공해줍니다.

 

 

위 두가지를 사용한다면 메모리 버퍼로 데이터를 고속 전송하게 되어서 출력 성능이 향상되는 효과를 얻습니다.

 

BufferedOutputStream과 BufferedWriter 보조 스트림은 다음과 같이 내부 버퍼를 제공합니다.

BufferedOutputStream bos = new BufferedOutputStream(바이트 기반 출력 스트림);
BufferedWriter bw = new BufferedWriter(문자 기반 출력 스트림);

BufferedInputStream and BufferedReader

BufferedInputStream은 바이트기반, BufferedReader는 문자기반 입력 스트림에 연결되어서 버퍼를 제공해줍니다.

 

둘다 입력 소스로 부터 자신의 내부 버퍼 크기만큼 데이터를 미리 읽고 버퍼에 저장합니다.

그로인해 읽기 성능이 향상됩니다.

 

아래는 다음과 같이 두가지가 내부 버퍼를 제공하는 코드입니다.

BufferedInputStream bis = new BufferedInputStream(바이트 기반 입력 스트림);
BufferedReader br = new BufferedReader(문자 기반 입력 스트림);

참고로  BufferedReader라인 단위로 문자열을 읽는 편리한 readLine()메소드를 제공합니다.

★더 정확히 말하자면 Enter키(캐리지리턴 \r + 라인피드 \n)이전의 모든 문자열을 읽는 것입니다.

그리고 readLine()메소드가 더 이상 읽을 수 있는 라인이 없다면 null을 리턴합니다. 

이걸 응용하여 반복문을 빠져나오기도 합니다.

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

프린터 보조 스트림  (0) 2021.07.16
기본 타입 입출력 보조 스트림  (0) 2021.07.15
문자 변환 보조 스트림  (0) 2021.07.15
보조 스트림  (0) 2021.07.15
문자 입력 스트림 Reader  (0) 2021.07.15