티스토리 뷰

Java의 보조 스트림

  • 실제 읽기/쓰기 스트림이 아닌 보조 기능을 제공하는 스트림
  • FilterInputStream 및 FilterOutputStream은 보조 스트림의 상위 클래스입니다.
  • 다른 스트림(기본 스트림 또는 다른 보조 스트림)을 생성자의 매개변수로 사용
  • 데코레이터 패턴(Decorator Pattern)으로 주로 구현한다
    • 기능을 만들기 위해서는 상속을 주로 쓰지만 이 경우에는 코드가 지저분해지기 때문이다

상위 클래스 생성자

생성자 설명
protected FilterInputStream과(InputStream in) 생성자의 매개변수로 InputStream을 받습니다.
public FilterOutputStream(OutputStream out) 생성자의 매개변수로 OutputStream을 받습니다.

InputStreamReaderOutputStreamWriter

  • 바이트 단위로 읽거나 쓴 데이터를 문자로 변환하는 보조 스트림
    FileInputStream에서 읽은 데이터를 문자로 변환하는 예
public class InputStreamReaderTest {
    public static void main(String[] args) {
        try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))) {
            int i;
            while((i = isr.read()) != -1) { //Read into secondary stream.
                System.out.print((char)i);
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

BufferedInputStreamBufferedOutputStream

  • 약 8k의 Array로 I/O 속도를 높일 수 있는 보조 스트림용으로 제공됩니다.
  • BufferedReader 및 BufferedWriter는 문자에 대한 I/O 보조 스트림입니다.
public class BufferedStreamTest {
    public static void main(String[] args) {
        long millisecond = 0;
        try(FileInputStream fis = new FileInputStream("a.zip");
            FileOutputStream fos = new FileOutputStream("copy.zip");
            BufferedInputStream bis = new BufferedInputStream(fis);
            BufferedOutputStream bos = new BufferedOutputStream(fos)) {
            
            millisecond = System.currentTimeMillis();
            int i;
            while((i = bis.read()) != -1) {
                bos.write(i);
            }
            millisecond = System.currentTimeMillis() - millisecond;
        } catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println("It took " + millisecond + " milliseconds to copy the file.");
    }
}

DataInputStreamDataOutputStream

  • 데이터가 메모리에 저장되면서 읽거나 쓰는 스트림.
    DataInputStream 메서드:

    DataOutputStream 메서드:
public class DataStreamTest {
    public static void main(String[] args) {
        try(FileOutputStream fos = new FileOutputStream("data.txt");
            DataOutputStream dos = new DataOutputStream(fos)) {
            dos.writeByte(100);
            dos.writeChar('A');
            dos.writeInt(10);
            dos.writeFloat(3.14f);
            dos.writeUTF("Test");
        } catch(IOException e) {
            e.printStackTrace();
        }

        try(FileInputStream fis = new FileInputStream("data.txt");
            DataInputStream dis = new DataInputStream(fis)) {
            System.out.println(dis.readByte());
            System.out.println(dis.readChar());
            System.out.println(dis.readInt());
            System.out.println(dis.readFloat());
            System.out.println(dis.readUTF());
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90