* 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 |