Stream
- 흐르는 시냇물 본래 영단어의 뜻은 흐르는 시냇물이라고 한다. 넓게 보아 ‘흐름’을 의미한다고 보면 될 것 같다.
- 데이터의 흐름 컴퓨터 용어로 stream이란, 데이터, 패킷, 비트 등 일련의 연속성을 갖는 흐름을 의미한다고 한다.
- 음성, 영상, 텍스트 등이 작은 데이터 조각으로 하나의 줄기를 이루면서, 순서대로 물 흐르듯 전송되는 데이터 열을 의미한다.
예시 ) 동영상 및 음원 스트리밍 Streaming
- ‘흘리다’라는 뜻의 streaming.
- 소리나 동영상 멀티미디어 파일을 전송하고 재생하는 방식의 하나가 스트리밍이다.
- 동영상 전체를 다운 받고 재생하려면 시간이 걸린다. 크기가 크기 때문에 미디어를 저장하고 전달하는 비용이 크다. 그 비용을 줄일 수 있는 것이 스트리밍이다. 스트리밍은 점진적으로 다운로드하면서 재생하는 방식이다. 저장하면서 압축을 할 수 있다.
- 스트리밍을 이용해 라이브 방송을 할 수 있다.
Stream의 기본 단위 Byte
- 프로그램은 입력 스트림에게서 받은 바이트들을 문자로 해석하거나, 4byte씩 끊어서 정수로 인식하는 등 다양하게 해석할 수 있다.
입력 스트림
- 키보드, 마우스, 네트워크 등과 같은 입력장치에서 입력된 데이터가 순서대로 프로그램에 흘러가는 데이터의 흐름 또는 소프트웨어 장치를 말한다.
- 데이터가 입력장치 -> 프로그램 으로 이동하는 방향
출력 스트림
- 프로그램에서 출력된 데이터가 프린터, 콘솔, LCD, 네트워크 등과 같은 출력 장치에 순서대로 전송되도록 하는 데이터의 흐름 또는 소프트웨어 장치를 말한다.
- 프로그램 -> 출력장치 로 데이터가 이동하는 방향
자바 코드 예시
1
InputStreamReader reader = new InputStreamReader(System.in);
- System.in : 표준 입력 스트림을 발생시키는 장치 (문자를 바이트 정보로 인식)
- InputStreamReader : System.in에 의해서 리턴되는 스트림 데이터를 문자 스트림으로 변환 (바이트 정보를 문자로 인식)
- InputStreamReader로 데이터를 읽으면 입력된 순서로 문자 값을 해석하여 읽을 수 있다.
- 스트림은 데이터 처리를 위해 여러 개 연결 가능
스트림의 특징
- 분류 : 바이트 스트림 & 문자 스트림
- 스트림은 지연될 수 있다.
- 만약 출력 스트림에 데이터가 꽉 차 있다면, 프로그램은 더 이상 출력을 할 수 없어 빈공간이 생길 때까지 기다려야 한다.
자바의 InputStream, OutputStream
- Java.io 패키지 : 자바는 응용 프로그램이 입출력 스트림을 생성하여 입출력을 수행할 수 있도록 입출력 스트림을 위한 클래스를 제공한다.
- InputStream : 바이트 기반 입력 스트림의 최상위 클래스. 추상클래스이다.
- OutputStream : 바이트 기반 출력 스트림의 최상위 클래스. 추상클래스이다.
inputStream 클래스 예시
- java.io.InputStream (implements java.io.Closeable)
- java.io.ByteArrayInputStream
- java.io.FileInputStream
- java.io.FilterInputStream
- java.io.BufferedInputStream
- java.io.DataInputStream (implements java.io.DataInput)
- java.io.LineNumberInputStream
- java.io.PushbackInputStream
- java.io.ObjectInputStream (implements java.io.ObjectInput, java.io.ObjectStreamConstants)
- java.io.PipedInputStream
- java.io.SequenceInputStream
- java.io.StringBufferInputStream
Java.io 패키지의 주요 클래스 | 설명 |
---|---|
File |
파일 시스템의 파일 정보를 얻기 위한 클래스 |
Console |
콘솔로부터 문자를 입출력하기 위한 클래스 |
InputStream OutputStream |
바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스 |
FileInputStream FileOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
DataInputStream DataOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
ObjectInputStream ObjectOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
PrintStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
BufferedInputStream BufferedOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
Reader Writer |
문자 단위 입출력을 위한 최상위 입출력 스트림 클래스 |
FileReader FileWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
InputStreamReader OutputStreamWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
PrinterWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
BufferedReader BufferedWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
InputStream 메소드
InputStream 메소드 | 설명 |
---|---|
int available() |
현재 읽을 수 있는 바이트 수를 반환한다 |
void close() |
현재 열려있는 InputStream을 닫는다 |
void mark(int readlimit) |
InputStream에서 현재의 위치를 표시해준다 |
boolean markSupported() |
해당 InputStream에서 mark()로 지정된 지점이 있는지에 대한 여부를 확인한다 |
abstract int read() |
InputStream에서 한 바이트를 읽어서 int값으로 반환한다 |
int read(byte[] b) |
byte[] b 만큼의 데이터를 읽어서 b에 저장하고 읽은 바이트 수를 반환한다 |
int read(byte[] b, int off, int len) |
len만큼 읽어서 byte[] b의 off위치에 저장하고 읽은 바이트 수를 반환한다 |
void reset() |
mark()를 마지막으로 호출한 위치로 이동 |
long skip(long n) |
InputStream에서 n바이트만큼 데이터를 스킵하고 바이트 수를 반환한다 |
OutputStream 메소드
OutputStream 메소드 | 설명 |
---|---|
void close() |
OutputStream을 닫는다 |
void flush() |
버퍼에 남아있는 출력 스트림을 출력한다 |
void write(byte[] b) |
버퍼의 내용을 출력한다 |
void write(byte[] b, int off, int len) |
b배열 안에 있는 시작 off부터 len만큼 출력한다 |
abstract void write(int b) |
정수 b의 하위 1바이트를 출력한다 |
참고자료