[JAVA] 15-1. 자바 입출력_자바 입출력과 스트림
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 | 입력 | 문자 | 보조 |