[Java] Byte기반 보조stream

JTI·2023년 1월 14일
0

☕️  Java

목록 보기
51/59
post-thumbnail

💡 FilterInputStream / FilterOutputStream


✔️ 모든 바이트기반 보조스트림의 최고조상

  • 보조스트림은 자체적으로 입출력을 수행할 수 없다.
protected FiterInputStream(InputStream in)
public FilterOutputStream(OutputStream out)
  • 상속을 통해 FilterInputStream / FilterOutputStreamread()write() 를 원하는 기능대로 오버라이딩해야 한다.

❗️ FilterInputStrema의 자손

  • BufferedInputStream
  • DataInputStream
  • PushbackInputStream

❗️ FilterOutputStream의 자손

  • BufferedOutputStream
  • DataOutputStream
  • PrintStream

💡 BufferedInputStream / BufferedOutputStream


✔️ 입출력 효율을 높이기 위해 버퍼(byte[])를 사용하는 보조스트림

프로그램에서 버퍼에 저장된 모든 데이터를 다 읽고 그 다음 데이터를 읽기위해 read() 가 호출되면, BufferedInputStream 은 입력소스로부터 다시 버퍼크기 만큼의 데이터를 읽어다 버퍼에 저장해 놓는다.

이와 같은 작업이 계속해서 반복된다.

BufferedOutputStream 역시 프로그램에서 write() 를 이용한 출력이 버퍼에 저장된다.

버퍼가 가득차면, 그 때 버퍼의 모든 내용을 출력소스에 출력한다. 그리고는 버퍼를 비우고 다시 프로그램으로부터의 출력을 저장할 준비를 한다.

❗️ BufferedOutputStream의 close()flush() 를 호출하여 버퍼의 내용을 출력스트림에 쓰도록 한 후, BufferedOutputStream인스턴스의 참조변수에 null을 지정함으로써 사용하던 자원들이 반환되게 한다.

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamEx1 {
    public static void main(String[] args) {
        try {
            FileOutputStream fos = new FileOutputStream("123.txt");

            // BufferOutputStream의 버퍼 크기를 5로한다.
            BufferedOutputStream bos = new BufferedOutputStream(fos, 5);

            // 파일 123.txt에 1부터 9까지 출력한다.
            for(int i = '1'; i <= '9'; i++) {
                bos.write(i); // 1, 2, 3, 4, 5
            }
            fos.close();

        } catch (IOException e ) {
            e.printStackTrace();
        }
    }
}
1, 2, 3, 4, 5

버퍼에 남아있는 데이터가 출려되지 못한 상태로 프로그램이 종료되었기 때문에 5까지만 출력된 것을 알 수 있다.

  • bos.close() 를 해주면 전체가 다 나온다.

BufferedOutputStream의 close() 는 기반 스트림인 FileOutputStream의 close() 를 호출하기 때문에 FileOutputStream의 close() 는 따로 호출해주지 않아도 된다.

❗️ 보조 스트림의 close()만 호출하면 된다


References
: https://cafe.naver.com/javachobostudy

profile
Fill in my own colorful colors🎨

0개의 댓글