스트림(stream)이란?
- 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름
- 운영체제에 의해 생성되는 가상의 연결 고리
- 프로그램과 장치들 간의 중간 매개자 역할
- 한 방향으로만 통신할 수 있다.
- Java에서의 스트림 생성 == 스트림 클래스 타입의 인스턴스를 생성
- Java에서 스트림은 기본적으로 바이트 단위로 데이터를 전송합니다.
입출력 스트림
클래스 | 메소드 | 설명 |
---|---|---|
InputStream | abstract int read() | 해당 입력 스트림으로부터 다음 바이트를 읽어들인다. |
int read(byte[] b) | 해당 입력 스트림으로부터 특정 바이트를 읽어들인 후, 배열 b에 저장한다. | |
int read(byte[] b, int off, int len) | 해당 입력 스트림으로부터 len 바이트를 읽어들인 후, 배열 b[off]부터 저장한다. | |
OutputStream | abstract void write(int b) | 해당 출력 스트림에 특정 바이트를 저장한다. |
void write(byte[] b) | 배열 b의 특정 바이트를 배열 b의 길이만큼 해당 출력 스트림에 저장한다. | |
void write(byte[] b, int off, int len) | 배열 b[off]부터 len 바이트를 해당 출력 스트림에 저장한다. |
read() 메소드는 해당 입력 스트림에서 더 이상 읽어들일 바이트가 없으면, -1을 반환해야 한다.
그런데 반환 타입을 byte 타입으로 하면, 0부터 255까지의 바이트 정보는 표현할 수 있지만 -1은 표현할 수 없게 된다.
따라서 InputStream의 read() 메소드는 반환 타입을 int형으로 선언하고 있다.
바이트 기반 스트림
입력 스트림 | 출력 스트림 | 입출력 대상 |
---|---|---|
FileInputStream | FileOutputStream | 파일 |
ByteArrayInputStream | ByteArrayOutputStream | 메모리 |
PipedInputStream | PipedOutputStream | 프로세스 |
AudioInputStream | AudioOutputStream | 오디오 장치 |
보조 스트림
- 실제로 데이터를 주고받을 수는 없지만, 다른 스트림의 기능을 향상시키거나 새로운 기능을 추가해 주는 스트림
입력 스트림 | 출력 스트림 | 설명 |
---|---|---|
FilterInputStream | FilterOutputStream | 필터를 이용한 입출력 |
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 |
DataInputStream | DataOutputStream | 입출력 스트림으로부터 자바의 기본 타입으로 데이터를 읽어올 수 있게 한다. |
ObjectInputStream | ObjectOutputStream | 데이터를 객체 단위로 읽거나, 읽어 들인 객체를 역직렬화시킴. |
SequenceInputStream | X | 두 개의 입력 스트림을 논리적으로 연결한다. |
PushbackInputStream | X | 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가한다. |
X | PrintStream | 오디오 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가한다. |
문자 기반 스트림
- Java에서 가장 작은 타입인 char 형이 2바이트
- 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘든 경우가 있다.
- 문자 기반의 스트림도 별도로 제공합니다.
- 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘든 경우가 있다.
기존의 바이트 기반 스트림에서 InputStream을 Reader로, OutputStream을 Writer로 변경하면 사용할 수 있다.
- 문자 기반의 입출력 스트림
입력 스트림 | 출력 스트림 | 입출력 대상 |
---|---|---|
FileReader | FileWriter | 파일 |
CharArrayReader | CharArrayWriter | 메모리 |
PipedReader | PipedWriter | 프로세스 |
StringReader | StringWriter | 오디오 장치 |
- 문자 기반의 보조 스트림
입력 스트림 | 출력 스트림 | 설명 |
---|---|---|
FilterReader | FilterWriter | 필터를 이용한 입출력 |
BufferedReader | BufferedWriter | 버퍼를 이용한 입출력 |
PushbackReader | X | 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가한다. |
X | PrintWriter | 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가한다. |