1. 스트림이란?
자바에서 모든 입출력은 스트림(Stream)을 통해 이루어진다.
입출력 장치는 매우 다양하기 때문에 장치에 따라 입출력 부분을 다르게 구현하면 호환성이 떨어진다.
따라서, 자바는 입출력 장치와 무관하고 일관성있게 프로그램을 구현할 수 있도록 일종의 가상통로인 스트림을 제공한다. 자료를 읽어 들이는 Source와 자료를 쓰려는 target에 따라 다른 스트림 클래스를 제공한다.
스트림을 3가지 기준에 따라 분류할 수 있다.
1. 입력 스트림과 출력 스트림
스트림은 단방향으로 자료가 이동하므로 입출력을 동시에 할 수 없다.
1) 입력 스트림: 어떤 대상으로부터 데이터를 읽을 때 사용하는 스트림
- InputStream / Reader 로 끝나는 클래스
2) 출력 스트림: 어떤 대상으로 데이터를 출력할 때 사용하는 스트림
- OutputStream / Writer 로 끝나는 클래스
입력 스트림 | FileInputStream, FileReader, BufferedInputStream, BufferedReader 등 |
출력 스트림 | FileOutputStream, FileWriter, BufferedOutputStream, BufferedWriter 등 |
2. 바이트 단위 스트림과 문자 단위 스트림
1) 바이트 단위 스트림: 바이트(byte) 단위로 자료의 입출력이 이루어지는 스트림
- 그림, 동영상, 음악 파일 등 대부분의 파일은 바이트 단위로 입출력
- Stream으로 끝나는 클래스
2) 문자 단위 스트림: 문자를 읽고 쓰기 위한 스트림
- 입출력 중 가장 많이 사용하는 자료인 문자를 위해 별도로 제공(한글은 2바이트로 1바이트씩 입출력하면 깨지는 문제가 있음)
- Reader / Writer 로 끝나는 클래스
바이트 스트림 | FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream |
문자 스트림 | FileReader, FileWriter, BufferedReader, BufferedWriter |
3. 기반 스트림과 보조 스트림
1) 기반 스트림: 데이터를 직접 입출력하는 스트림
2) 보조 스트림: 데이터를 직접 입출력하지 않고 다른 스트림에 부가 기능을 제공하는 스트림
기반 스트림 | FileInputStream, FileOutputStream, FileReader, FileWriter |
보조 스트림 | InputStreamReader, OutputStreamWriter, BufferedInputStream, BufferedOutputStream |
<스트림 종류 생각해보기>
스트림 | 입력/출력 | 문자/바이트 | 기반/보조 |
FileReader | 입력 | 문자 | 기반 |
FileOutputStream | 출력 | 바이트 | 기반 |
BufferedReader | 입력 | 문자 | 보조 |
'Java > Do It! 자바 프로그래밍' 카테고리의 다른 글
[JAVA] 15-3. 바이트 단위 스트림 (0) | 2022.05.11 |
---|---|
[JAVA] 15-2. 자바 입출력_표준 입출력 (0) | 2022.05.11 |
[JAVA] 14. 예외 처리 (0) | 2022.05.11 |
[JAVA] 13-3. 스트림 (0) | 2022.05.10 |
[JAVA] 13-2. 람다식 (0) | 2022.05.10 |