▶ 스트림 (Stream)

  1. Verb 줄줄[계속] 흐르다[흘러나오다]
  2. Verb 줄을 지어[줄줄이] 이어지다[이동하다]
  • 스트림은 입출력을 물의 흐름처럼 실행하는걸 의미한다 (=순서가 있는 데이터의 연속적인 흐름을 의미 (=하나의 스트림은 하나의 방향만 가능하다
  • 자바에서 모든 입출력(입력과 출력)은 스트림(Stream)을 통해 이루어진다
  • 데이터를 입출력하는데 사용되는 연결통로이자 중간 매개체이다
  • 외부 장치로는 키보드와 모니터가 대표적이다

Stream의 특징

  • 스트림은 순차적인 구조를 갖는다 먼저 입력된 데이터가 출력되는 형태이며, 이때문에 순차적인 접근만 가능하다
  • 스트림은 단방향이므로 하나의 스트림으로 입출력을 동시에 수행하지 못한다. 양방향의 전송이 필요하면 출력 스트림과 입력 스트림이 각각 필요하다

 

▶ 스트림의 분류 #1 (Stream)

  • 입출력을 위한 클래스들은 java.io 패키지에 있다
  • 그중 데이터 종류에 따라 크게 2가지로 나눈다
  • 1차 스트림 : 실제 데이터를 주고받는 입출력 스트림을 직접 생성한다. 기본 기능을 담당하여 대상과 직접 데이터를 주고 받는다
  • 2차 스트림 : 1차 스트림에 새로운 기능을 추가해 확장한 스트림이다. 1차 스트림이나 다른 2차 스트림에 붙어서 효울성을 높여준다. 자체만으로는 입출력을 수행하지 못한다

스트림 클래스는

1) 소스나 목적지에 데이터를 입출력하는 데이터 싱크(Data Sink Class)

2) 데이터를 가공하는 데이터 처리 클래스(Data Processing Class)로 분류할 수 있다

  바이트 스트림  (Byte Stream)
  ⦁ 바이트 단위로 읽고 쓰는 클래스
  (그림, 멀티미디어, 문자 등 모든 종류의 데이터 입출력이 가능

  ⦁ Byte Stream은 데이터를 1바이트 단위로 전송한다
  - Byte Stream클래스는 추상 클래스인 InputStream와 OutputStream이 최상위 클래스이다
  - Byte Stream클래스 이름에는 InPut(입력) Output(출력)이 붙는다
  InputStream
 1) 바이트 입력 스트림의 최상위 추상 클래스
 2) 바이트 입력 스트림에서 사용하는 추상 클래스
OutputStream
 : 바이트 출력 스트림에서 사용하는 추상 클래스
소스/목적지                                                데이터 싱크 스트림
메모리  ByteArrayInputStream    ByteArrayOutputStream
 StringBufferInputStream  
파일 ⦁ FileInputStream  
 : 파일에서 데이터를 바이트 단위로 읽어들이는 클래스
  ⦁ FileOutputStream
 : 데이터를 바이트 단위로 파일에 저장하는 클래스
                                                  데이터 처리 스트림
필터링 ▶ FilterInputStream
 : 필터가 있는 바이트 입력 스트림에서 사용하는 추상 클래스
  ▶ FilterOutputStream
 : 필터가 있는 바이트 출력 스트림에서 사용하는 추상 클래스
버퍼링 ⦁ BufferInputStream
 : 버퍼가 있는 바이트 입력 스트림에서 사용하는 클래스. 버퍼로 인해 성능이 향상된다
  BufferOutputStream
버퍼가 있는 바이트 출력 스트림에서 사용하는 클래스 버퍼로 인해 성능이 향상된다
결합  SequenceInputStream    SequenceOutputStream
객체 직렬화  ObjectInputStream
 : 객체 단위로 직력화된 데이터를 역직렬화하여 읽어들이는 클래스
  ⦁ ObjectOutputStream
 : 바이트를 객체 단위로 직렬화하여 저장하는 클래스
데이터 변환  DataInputStream
 : 바이트 단위가 아니라 기본 자료형인 데이터를 바이트 스트림을 읽어들이는 클래스
   DataOutputStream
 : 바이트 스트림을 바이트 단위가 아니라 기본 자료형인 데이터로 내보내는 클래스
문장 번호 세기  LineNumberInputStream  
출력  PrintStream  
   PipedInputStream    PipedOutputStream
   PushbackInputStream    

 InputStream

abstract int read()
           메소드 설명
int read() 입력 스트림에서 1byte 씩 읽고 읽은 바이트를 반환한다
더 이상 읽을 데이터가 존재하지 않으면 -1을 반환한다
int read(byte[] buffer) 입력스트림을 통해서 읽어 들여진 데이터들이 배열에 저장된다
읽어들인 데이터와 바이트크기를 반환한다
더 이상 읽을 데이터가 존재하지 않으면 -1을 반환한다
int read (byte[] buffer,
int off, int len)
입력스트림으로부터 len개의 바이트만큼 읽고 매개변수인 바이트 배열 buffer[off[부터 len개까지 저장한다.
그리고 실제로 읽은 바이트수인 len개를 리턴한다.
만약 len개를 읽지 못하면 실제로 읽은 바이트 수를 리턴한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      문자 스트림  (Character Stream)
  ⦁ 문자 단위(유니코드)로 읽고 쓰기 위한 클래스
  (문자만 입출력이 가능하며 문자만 받고 보낼 수 있도록 특화

   Character Stream은 데이터를 2바이트 단위로 전송한다
  - 이들은 모두 추상 클래스인 Reader와 Writer 클래스가 최상위 클래스이다
  - 문자 스트림 클래스 이름에는 Reader(입력)와 Writer(출력)이 붙는다
  Reader ▶ Writer
소스/목적지                                                 데이터 싱크 스트림
메모리 ⦁ CharArrayReader ⦁ CharArrayWriter
⦁ StringReader ⦁ StringWriter
파일 ⦁ FileReader ⦁ FileWriter
                                                 데이터 처리 스트림
버퍼링  BufferedReader  ⦁ BufferedWriter
필터링 ▶ FilterReader ⦁ FilterWriter
문자와 바이트 변환 ▶ InputStreamReader ▶ OutputStreamWriter
출력 ⦁ PipedWriter  
     
  ⦁ ByteArrayInputStream  
  ⦁ PipedReader  
  ⦁ LineNumberReader  
  ⦁ PushbackReader  

 

 

▶ 스트림의 분류 #2 (Stream)

기능에 따라 크게 2가지로 나눈다

  •  

'Language > Java' 카테고리의 다른 글

Spring  (0) 2022.09.11
스레드  (0) 2022.03.10
JAVA 기본 API  (0) 2022.02.28
컬렉션 (Collection)  (0) 2022.02.23
제네릭 Generic  (0) 2022.02.23