보조 스트림
✒️ 2025-05-15 13:29 내용 수정
실제로 데이터를 주고 받을 수 없지만, 다른 스트림(기반 스트림)의 기능을 향상 시키거나 새로운 기능을 추가해주는 스트림
- 다른 보조 스트림과 중첩하여 사용할 수 있다.
- 보조 스트림을 단독으로 사용할 수 없고, 먼저 InputStream/Reader나 OutputStream/Writer를 만들어 준 이후에 보조 스트림에 연결해줘야 한다.
- 기본 기능에 커스텀 가능한 파츠라고 생각해보자.
성능 향상 보조 스트림
- 프로그램이 입출력 소스와 직접 작업하지 않고 메모리 버퍼를 이용하여 작업하도록 보조하는 스트림
- 데이터를 하나씩 직접 작업하는 것보다 버퍼에 여러 데이터를 담아 작업을 처리하기 때문에 속도가 더 빠르다.
- 바이트 기반 스트림 : BufferedInputStream, BufferedOutputStream
- 문자 기반 스트림 : BufferedReader, BufferedWriter
- 백준 알고리즘에서 입출력 시에 많이 사용했다.(속도 및 메모리 문제)
- BufferedReader의 버퍼는 8192이므로 Scanner보다 더 많은 양의 데이터를 읽어올 때 효율적이고 빠르다.
- Scanner 클래스 참고.
- 키보드 입력을 받을 때 Scanner 클래스를 쓰는 것보다 속도가 더 빠르다.
- 출력도 System 클래스를 쓰는 것보다 속도가 더 빠르다.
- BufferedReader의 버퍼는 8192이므로 Scanner보다 더 많은 양의 데이터를 읽어올 때 효율적이고 빠르다.
BufferedInputStream 인스턴스이름 = new BufferedInputStream(입력스트림);
BufferedOutputStream 인스턴스이름 = new BufferedOutputStream(출력스트림);
BufferedReader 인스턴스이름 = new BufferedReader(입력스트림);
BufferedWriter 인스턴스이름 = new BufferedWriter(출력스트림);
문자 변환 보조 스트림
- 바이트 기반 스트림으로 텍스트 파일을 읽거나 쓰는 경우 문자 입출력 데이터를 Reader와 Writer로 변환하여 사용하는 것을 보조하는 스트림
- 바이트 기반 스트림을 문자 기반 스트림처럼 사용할 수 있게 도와준다.
- InputStreamReader, OutputStreamWriter 등이 있다.
- 생성 시 인코딩 설정을 해야 한다.
- 파일이 생성될 때 사용한 인코딩과 같아야 하며, 인코딩을 기입하지 않으면 System의 인코딩 설정을 따라간다.
- 보통 "UTF-8" 인코딩 설정을 사용한다.
// 키보드 입력을 받을 때 Scanner 클래스보다 더 빠르다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// System 클래스의 print() 메서드보다 출력 속도가 빠르다
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));