Java에서 입출력시 InputStreamOutputStream을 사용한다. 이 들은 각각 추상 클래스기 때문에 별도의 구현체를 사용한다.

Byte Stream

데이터를 바이트 단위로 주고 받을 때 사용한다.

InputStream

Untitled

  • BytesArrayInputStream: 바이트 배열을 읽기 위해서 내장된 버퍼를 사용한다.
  • FileInputStream: 파일을 바이트 단위로 읽기위해서 사용한다.
  • FilterInputStream: InputStream에 추가 기능을 사용하기 위해서 사용한다. 이는 다른 InputStream을 포함하고 있어야되면 단독으로 사용은 불가능하다.
    • BufferedInputStream: 입력 성능을 개선하기 위해 사용한다. 특정 크기(기본값 8bytes)만큼의 버퍼를 할당한 후 데이터를 미리 읽고 저장한다. 이후 주가적인 읽기 작업이 필요하면 버퍼의 크기를 늘려 읽기를 실행시킨다.
    • DataInputStream: Java의 원시 타입으로 읽을 때 사용한다.
    • LineNumberInputStream: 현재 줄 번호를 추적하는데 사용한다.
    • PushBackInputStream: 바이트 단위로 읽기를 취소할 때 사용할 수 있다.
  • ObjectInputStream: 객체로 역직렬화 할 때 사용한다.
  • PipedInputStream: 다른 스레드로부터 데이터를 읽을 때 사용한다.
  • SequenceInputStream: 두 개의 스트림을 하나로 연결할 때 사용한다.
  • StringBufferInputStream: @Deprecated

OutputStream

![Untitled](assets/Untitled 1.png)

  • ByteArrayOutputStream: 바이트 배열을 쓰기위해 사용한다.
  • FileOutputStream: 파일을 쓰기위해 사용한다.
  • FilterOutputStream: OutputStream의 데이터를 변환하거나 추가 기능을 사용할 수 있다. FilterOutputStream 단독으로 사용할 수는 없다.
    • BufferedOutputStream: 출력 성능을 개선하기 위해 사용한다. 버퍼링된 OutputStream 이 구현되어 있다.
    • DataOutputStream: Java의 원시 타입으로 쓸 때 사용한다.
    • PrintStream: println()같은 출력을 좀 더 편하게 도와준다.
  • ObjectOutputStream: 객체를 직렬화할 때 사용한다.
  • PipedOutputStream: 다른 스레드로 데이터를 보낼 때 사용한다.

Character Stream

데이터를 문자 단위로 주고 받을 때 사용한다.

Reader

Untitled

  • BufferedReader: Reader의 읽기 요청을 버퍼링할 때 사용한다.
  • LineNumberReader: 줄 번호를 추적하는데 사용한다.
  • CharArrayReader: 문자 배열을 스트림으로 사용할 수 있도록 한다.
  • FilterReader: 문자 데이터를 변환할 때 사용할 수 있다.
    • PushbackReader: 문자 읽기를 취소할 때 사용한다.
  • InputStreamReader: 바이트 단위 스트림을 문자열 단위로 변환할 때 사용한다.
    • FileReader: 문자 파일을 읽기위해 사용한다.
  • PipedReader: 다른 스레드로부터 문자를 받을 때 사용한다.
  • StringReader: String으로부터 스트림을 만들 때 사용한다.

Untitled

  • BufferedWriter: Writer의 쓰기 요청을 버퍼링 할 때 사용한다.
  • CharArrayWriter: 문자 배열을 스트림으로 사용할 수 있도록 한다.
  • FilterWriter: 문자 데이터를 변환할 때 사용할 수 있다.
  • OutputStreamWriter: 바이트 단위 스트림을 문자열 단위로 변환할 때 사용한다.
    • FileWriter: 문자 파일을 쓰기위해 사용한다.
  • PipedWriter: 다른 스레드에게 문자를 보낼 때 사용한다.
  • PrintWriter: println()같은 출력을 좀 더 편하게 도와준다.
  • StringWriter: String으로부터 스트림을 만들 때 사용한다.

참고 자료

https://javagyansite.com/2020/03/22/byte-stream-hierarchy-in-java/

https://javagyansite.com/2020/03/22/character-stream-hierarchy-in-java/

https://docs.oracle.com/javase/7/docs/api/java/io/package-tree.html