BufferedInputStream, BufferedOutputStream은 입출력 효율을 높이기 위해 버퍼를 사용한다.
버퍼(바이트배열)를 이용해서 한번에 여러 바이트를 입출력하기 때문에 대부분의 입출력 작업에 사용함.
BufferedInputStream(InputStream in, int size) : 주어진 InputStream 인스턴스를 입력소스로 하며 지정된 크기(byte)의 버퍼를 갖는 인스턴스 생성
BufferedInputStream(InputStream in) : 주어진 InputStream 인스턴스를 입력소스로 하며 버퍼의 크기를 지정해주지 않기 때문에 기본적으로 8192byte크기의 버퍼를 갖는다.
프로그램에서 입력소스로부터 데이터를 읽기 위해 처음으로 read 메서드를 호출하면
BufferedInputStream은 입력소스부터 버퍼 크기만큼의 데이터를 읽어서 내부 버퍼에 저장함.
이후 프로그램에서 BufferedInputStream의 버퍼에 저장된 데이터를 읽으면 된다.
프로그램에서 버퍼에 저장된 모든 데이터를 다 읽고 그 다음 데이터를 읽기 위해서 read 메서드를 호출하면 BufferedInputStream은 입력소스로부터 다시 버퍼크기만큼의 데이터를 읽어다 버퍼에 저장해놓음. 이를 반복한다
BufferedOutputStream(OutputStream out, int size) : 주어진 OutputStream인스턴스를 출력소스로 하며 지정된 크기의 버퍼를 갖는 인스턴스 생성
BuffferedOutputStream(OutputStream out) : 버퍼의 크기를 지정해주지 않으므로 InputStream과 동일한 최대 8192byte 크기의 버퍼를 가짐
flush() : 버퍼의 모든 내용을 출력소스에 출력한 후, 버퍼를 비운다.
close() : flush()를 호출해서 버퍼의 모든 내용을 출력소스에 출력하고 그 후 BufferedOutputStream 인스턴스가 사용하던 모든 자원을 반환함.
입력소스로부터 데이터를 읽을때와는 반대로 BufferedOutputStream은 프로그램에서 write()를 이용한 출력이 BufferedOutputStream 버퍼에 저장됨.
버퍼가 가득차면 버퍼의 모든 내용을 출력소스에 출력한다. 그리고 버퍼를 비운 뒤 다시 프로그램으로부터의 출력을 저장할 준비를 한다고 함..
핵심은 버퍼가 가득 찼을때만 출력소스에 출력을 하기 때문에 마지막 출력부분이 출력소스에 쓰이지 못하고 BufferedOutputStream의 버퍼에 남아있는 채로 프로그램이 종료될 수 있다.
그래서 모든 출력작업을 마치고 close()나 flush()를 호출해서 마지막 버퍼에 있는 모든 내용일 출력소스에 출력되도록 해야함.
'JAVA' 카테고리의 다른 글
| 네트워킹 - URL, URI (0) | 2025.06.20 |
|---|---|
| I/O - File(Path 공부) (0) | 2025.06.19 |
| 바이트기반 보조스트림 - FilterInputStream, FilterOutputStream (0) | 2025.06.17 |
| FileInputStream, FileOutputStream 예제 (0) | 2025.06.16 |
| FileInputStream, FileOutputStream 메서드 (0) | 2025.06.15 |