CHAPTER 15. (2) 바이트 스트림이란? (바이트 기반 보조 스트림 포함)
바이트 스트림 (InputStream, OutputStream)
- 입출력 단위 1byte
- 바이트 단위로 데이터 전송
- java.io 패키지 통해 클래스 제공
- 입출력 대상이 달라져도 동일한 방법으로 입출력 가능
ex)
InputStream OutputStream
ㄴ 모든 바이트 기반 스트림의 조상
바이트 기반 보조 스트림 (BufferedInputStream, BufferedOutputStream)
- 스트림 기능을 보완하기 위한 보조 스트림
- 데이터 입출력 불가, but 스트림 기능 향상, 기능 추가 등 가능
- 스트림 생성 후 이를 이용해서 보조 스트림 생성
- 쓰고 안쓰고의 성능 차이 상당 (대부분 경우 보조 스트림 사용)
ex)
FilterInputStream FilterOutputStream
ㄴ (In/Out)putStream의 자손, 모든 보조스트림의 조상
ㄴ 자체적인 데이터 입출력 수행 불가 (기반 스트림 필요)
ㄴ 모든 메서드는 단순히 기반 스트림의 메서드를 그대로 호출 (자체로는 아무런 일도 하지 않음)
=> 상속을 통해 원하는 작업 수행하도록 읽고 쓰는 메서드 오버라이딩 필요
FileInputStream FileOutputStream
ㄴ 파일에 입출력을 하기 위한 스트림
ㄴ 필터를 이용한 입출력 처리
BufferedInputStream BufferedInputStream
ㄴ 버퍼를 이용한 입출력 성능향상
ㄴ 스트림 입출력 효율 증가 위해 사용
ㄴ 한 바이트씩 입출력 < 버퍼(바이트배열) 이용해서 한 번에 여러 바이트 입출력 이 더 빠름
ㄴ 버퍼크기는 입력소스로부터 한 번에 가져올 수 있는 데이터의 크기로 지정하는 것 추천 (보통 입력소스가 파일인 경우 : size 값 8192)
BufferedInputStream
ㄴ 출력시 버퍼가 가득 찼을 때만 출력소스에 출력 (마지막 출력부분이 버퍼에 남은 채로 종료될 수 있음)
=> 모든 출력작업 마친 후 close(), flush() 호출 (버퍼 모든 내용이 출력소스에 출력되도록)
SequenceInputStream
ㄴ 여러 개의 입력스트림 연속적으로 연결, 하나의 스트림으로부터 데이터 읽는 것처럼 처리
ex) 큰 파일을 여러 개의 작은 파일로 나눴다가, 하나로 합치는 등의 작업 수행시 사용
PrintStream
- 데이터를 기반스트림에 다양한 형태로 출력 가능한 메서드들을 오버로딩하여 제공 (ex.print, println, printf 등을 오버로딩)
- 문자기반 스트림 역할 수행 (데이터를 적절한 문자로 출력)
- JDK1.1 부터 향상된 기능 제공 (PrintWriter) 하였으나 PrintStream도 지속적으로 사용됨(System.out이 PrintStream이라서)
ㄴ PrintWriter가 PrintStream에 비해 다양한 언어의 문자 처리에 적합, 가능하면 PrintWriter 사용 권장