언어/자바

[JAVA]Stream이란

토킹포테토 2023. 3. 31. 13:04
728x90

* Stream이란?

: 스트림은 파일이나 키보드, 모니터 등 입출력 장치나 네트워크, 메모리 등으로부터 데이터를 입출력할 때 사용하는 처리를 정의 한 것.

 자바에서는 모든 입출력에서 스트림이라는 개념을 사용한다.

 FIFO(First-In-First-Out) 구조이며 단방향 구조.

 

* Stream 종류

1. 노드 스트림 : 직접 파일에 연결되는 스트림

   ex> InputStream , System.in

 

2. 필터스트림 : 노드 스트림에 연결하여 다른 처리를 도와주는 스트림

 

데이터를 저장소로부터 하나씩 가져오면 노드 스트림을 통과하게 된다.

이렇게 가져온 데이터는 순수 바이트로 바로 사용하기에는 문제가 있을 수 있다. 

예를 들면 한글이다. 한글 1글장에 2바이트기 때문에 깨지는 현상 발생.

 

그러므로 노드 스트림에 필터 스트림을 연결.

필터 스트림의 생성자에 노드 스트림의 객체를 주면 두 스트림이 연결 된다.

 

영어 외 문자를 처리하는 입력 필터 스트림은 Reader이고 출력스트림은 Writer 이다.

 

키보드 입력 ------------------------------------------>    언어처리           ->     버퍼처리   ->

                     InputStream(System.in)      InputStreamReader      BufferedReader

                              노드스트림                             필터스트림

 

ex> InputStreamReader 인풋스트림리더변수 = InputStreamReader(System.in)

 

노드 스트림은 바이트(byte) 단위로 데이터를 쓰고 읽는다.

리더를 연결하면 문자(character) 단위로 데이터를 읽고 쓸 수 있다.

입출력 단위 입력스트림 출력스트림
바이트(byte) inputStream OutputStream
캐릭터(char) Reader Writer

 

그럼 버퍼처리는 무엇인가?

: 노드 스트림을 사용할 때 지연 문제점이 발생한다. 

  이를 해결하기위해 필터 스트림인 버퍼를 사용.

 

* 버퍼 입력 스트림

(1) BufferedReader 클래스

    InputStreamReaded 클래스(필터 스트림)와 같이 리더에 연결함

(2) BufferedInputStream 클래스

    InputStream 클래스(노드 스트림)에 바로 연결

 

ex> BufferedReader 변수 = new BufferedReader(인풋스트림리더변수)

 

* 필터 스트림 종류

- 각 노드 스트림에 연결할 수 있는 필터 스트림이 따로 있다.

노드스트림 관련된 리더/라이터 관련 버퍼
inputStream inputStreamReader BufferedReader
BuffredInputStream
FileInputStream FileReader
FilterReader
 
DataInputStream    
OutputStream OutputStreamWriter BufferedWriter
BuffredOutputStream
FileOutputStream FileWriter  
DataOutPutStream FillterWriter  
printStream    

 

'언어 > 자바' 카테고리의 다른 글

[JAVA] Char to Int  (0) 2023.04.19
[JAVA] String.valueOf()  (0) 2023.04.18
[JAVA] indexOf(특정 문자 위치 찾기)  (0) 2023.03.17
[JAVA IO]FileInputStream & FileOutputStream  (0) 2023.03.09
쿠키(Cookie)와 세션(Session)  (0) 2022.11.22