스트림 (stream)
포스트
취소

스트림 (stream)

스트림(stream)이란?

  • 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름
  • 운영체제에 의해 생성되는 가상의 연결 고리
  • 프로그램과 장치들 간의 중간 매개자 역할
  • 한 방향으로만 통신할 수 있다.
  • Java에서의 스트림 생성 == 스트림 클래스 타입의 인스턴스를 생성
  • Java에서 스트림은 기본적으로 바이트 단위로 데이터를 전송합니다.

입출력 스트림

클래스메소드설명
InputStreamabstract int read()해당 입력 스트림으로부터 다음 바이트를 읽어들인다.
int read(byte[] b)해당 입력 스트림으로부터 특정 바이트를 읽어들인 후, 배열 b에 저장한다.
int read(byte[] b, int off, int len)해당 입력 스트림으로부터 len 바이트를 읽어들인 후, 배열 b[off]부터 저장한다.
OutputStreamabstract 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형으로 선언하고 있다.

바이트 기반 스트림

입력 스트림출력 스트림입출력 대상
FileInputStreamFileOutputStream파일
ByteArrayInputStreamByteArrayOutputStream메모리
PipedInputStreamPipedOutputStream프로세스
AudioInputStreamAudioOutputStream오디오 장치

보조 스트림

  • 실제로 데이터를 주고받을 수는 없지만, 다른 스트림의 기능을 향상시키거나 새로운 기능을 추가해 주는 스트림
입력 스트림출력 스트림설명
FilterInputStreamFilterOutputStream필터를 이용한 입출력
BufferedInputStreamBufferedOutputStream버퍼를 이용한 입출력
DataInputStreamDataOutputStream입출력 스트림으로부터 자바의 기본 타입으로 데이터를 읽어올 수 있게 한다.
ObjectInputStreamObjectOutputStream데이터를 객체 단위로 읽거나, 읽어 들인 객체를 역직렬화시킴.
SequenceInputStreamX두 개의 입력 스트림을 논리적으로 연결한다.
PushbackInputStreamX다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가한다.
XPrintStream오디오 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가한다.

문자 기반 스트림

  • Java에서 가장 작은 타입인 char 형이 2바이트
    • 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘든 경우가 있다.
      • 문자 기반의 스트림도 별도로 제공합니다.
  • 기존의 바이트 기반 스트림에서 InputStream을 Reader로, OutputStream을 Writer로 변경하면 사용할 수 있다.

  • 문자 기반의 입출력 스트림
입력 스트림출력 스트림입출력 대상
FileReaderFileWriter파일
CharArrayReaderCharArrayWriter메모리
PipedReaderPipedWriter프로세스
StringReaderStringWriter오디오 장치
  • 문자 기반의 보조 스트림
입력 스트림출력 스트림설명
FilterReaderFilterWriter필터를 이용한 입출력
BufferedReaderBufferedWriter버퍼를 이용한 입출력
PushbackReaderX다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가한다.
XPrintWriter다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.