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

ByteArrayOutputStream
: 바이트 배열을 쓰기위해 사용한다.FileOutputStream
: 파일을 쓰기위해 사용한다.FilterOutputStream
:OutputStream
의 데이터를 변환하거나 추가 기능을 사용할 수 있다.FilterOutputStream
단독으로 사용할 수는 없다.BufferedOutputStream
: 출력 성능을 개선하기 위해 사용한다. 버퍼링된OutputStream
이 구현되어 있다.DataOutputStream
: Java의 원시 타입으로 쓸 때 사용한다.PrintStream
:println()
같은 출력을 좀 더 편하게 도와준다.
ObjectOutputStream
: 객체를 직렬화할 때 사용한다.PipedOutputStream
: 다른 스레드로 데이터를 보낼 때 사용한다.
Character Stream
데이터를 문자 단위로 주고 받을 때 사용한다.
Reader
BufferedReader
:Reader
의 읽기 요청을 버퍼링할 때 사용한다.LineNumberReader
: 줄 번호를 추적하는데 사용한다.CharArrayReader
: 문자 배열을 스트림으로 사용할 수 있도록 한다.FilterReader
: 문자 데이터를 변환할 때 사용할 수 있다.PushbackReader
: 문자 읽기를 취소할 때 사용한다.
InputStreamReader
: 바이트 단위 스트림을 문자열 단위로 변환할 때 사용한다.FileReader
: 문자 파일을 읽기위해 사용한다.
PipedReader
: 다른 스레드로부터 문자를 받을 때 사용한다.StringReader
:String
으로부터 스트림을 만들 때 사용한다.
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