1. 필터 스트림

필터 스트림은 보조 스트림으로도 불린다. 필터 스트림은 다른 스트림과 연결되어 여러가지 편의 기능을 제공해준다. 필터 스트림은 위 그림처럼 주 입력 스트림과, 주 출력 스트림에 연결될 수 있고, 또한 아래 그림처럼 필터 스트림끼리 연결되어 스트림 체인을 구성할수도 었다.

https://hudi.blog/static/aab63a1e0b0ccf76894198d064d0a8ee/ca1dc/stream-chain.png

2. 필터 스트림 연결하기

InputStream inputStream = new FileInputStream(filePath); // InputStream

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
// InputStream에 InputStreamReader 필터 스트림 연결

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// InputStreamReader에 BufferedReader 필터 스트림 연결

위와 같이 입력 스트림에 여러 필터 스트림을 연결하여 스트림 체인을 구성할 수 있다. 후술하겠지만, InputStreamReader 는 바이트 기반 스트림인 InputStream 을 글자 기반 스트림인 Reader 로 변환해주는 필터 스트림이다. BufferdReader 는 Reader 스트림을 버퍼링을 통해 성능을 개선하기 위한 필터 스트림이다.

3. InputStreamReader

InputStreamReader 클래스는 바이트 입력 스트림인 InputStream 에 연결되어 문자 입력 스트림인 Reader 스트림으로 변경해주는 필터 스트림이다. 아래와 같이 사용할 수 있다. Reader 로 변환되었으므로, Reader 타입으로 받을 수 있다.

InputStream inputStream = new FileInputStream(filePath);
Reader reader = new InputStreamReader(inputStream);

4. OutputStreamWriter

OutputStreamWriter 클래스는 이름처럼 OutputStream 을 Writer 로 변환하는 필터 스트림이다.

FileOutputStream fileOutputStream = new FileOutputStream(filePath);
Writer writer = new OutputStreamWriter(fileOutputStream);

5. BufferedInputStream, BufferedReader

5.1 버퍼란

프로그램의 실행 성능은 컴퓨터를 구성하는 요소 중 가장 처리 속도가 느린 부품의 속도를 따른다. CPU, 메모리가 아무리 성능이 좋다 한들 하드디스크의 속도가 가장 느리므로 프로그램 처리 속도는 하드디스크의 영향을 많이 받게된다.

연산 장치와 보조 기억 장치의 속도 차이를 개선하기 위해 버퍼를 사용할 수 있다. 버퍼는 데이터를 보내지 않고 임시로 모아두다가, 일정 크기가 되었을 때 한번에 내보내기 위해 사용한다.

https://hudi.blog/static/68466ece8c5f29d4128535267156c69d/ca1dc/buffer1.png

5.2 생성하기 및 성능

InputStream inputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

Reader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);