1. BufferedInputStream과 BufferedOutputStream
- 앞서 봤을 수도 있겠지만, 이 보조 스트림은 입출력 효율을 높이기 위해 버퍼를 사용한다.
- 즉, 한 바이트씩 입출력하는 것 보다는 버퍼를 이용해서 한 번에 여러 바이트를 입출력하는 것이
빠르다.
- 아래는 Buffered 입력 스트림의 생성자이다.
(1) BufferedInputStream(InputStream in)
: InputStream의 인스턴스 in을 입력소스로 하며, 크기를 지정하지 않았으므로, 8192byte 크기의 버퍼를
갖게 된다.
(2) BufferedInputStream(InputStream in, int size)
: InputStream의 인스턴스 in을 입력소스로 하며, 지정된 size의 값 크기(byte 단위)의 버퍼를 갖는
인스턴스를 생성한다.
- 아래는 Buffered 출력 스트림의 생성자이다.
(1) BufferedOutputStream(OutputStream out)
: OutputStream의 인스턴스를 출력소스로 하며, 크기를 지정하지 않았으므로, 8192byte 크기의 버퍼를
갖게 된다.
(2) BufferedOutputStream(OutputStream out, int size)
: OutputStream의 인스턴스를 출력소스로 하며 지정된 크기(byte 단위)의 버퍼를 갖는 인스턴스를
생성한다.
(3) flush()
: 버퍼의 모든 내용을 출력소스에 출력한 다음, 버퍼를 비운다.
(4) close()
: flush() 수행 후, BufferedOutputStream의 인스턴스가 사용하던 모든 자원을 반환한다.
( 주의할 점은 버퍼가 가득 찼을 때만 출력소스에 출력하기 때문에, 마지막 출력부분이 출력소스에 쓰이지 못하고
남아있는 채로 종료될 수 있다. )
( 그러므로, BufferedOutputStream에 flush()나 close()를 호출해서 남아있는 부분이 있는지 확인해야 한다. )
1-1. Buffered 입출력 스트림을 이해하기 위한 예제(1)
( 예상했던 결과와 달리 6,7,8,9가 출력되지 않았다. )
( 그 이유는 위에서 말했듯이 flush()와 close()를 사용하지 않았기 때문이다. )
( 그러므로, fos.close() 위에 bos.flush()나 bos.close()를 사용해야 한다. )
( 또한 bos.close()를 사용하게 되면 기반(주) 스트림인 FileOutputStream의 close()를 호출하기 때문에,
따로 fos.close()를 해줄 필요 없다. )
( 추가적으로 보조 스트림의 조상인 FilterOutputStream의 close() 안에는 flush()가 선언되어 있으므로,
close()만 호출하면 된다. )
'자바 > 입출력 IO' 카테고리의 다른 글
InputStream의 자손: Sequence 입력 스트림(보조 스트림) (0) | 2022.04.25 |
---|---|
바이트 기반의 보조 스트림의 자손: Data 입출력 스트림 (0) | 2022.04.24 |
바이트 기반의 보조 스트림의 조상: Filter 입출력 스트림 (0) | 2022.04.24 |
바이트 기반 스트림: File 입출력 스트림 (0) | 2022.04.24 |
바이트 기반 스트림: Byte 입출력 스트림 (0) | 2022.04.24 |