Java/Do It! 자바 프로그래밍

[JAVA] 15-1. 자바 입출력_자바 입출력과 스트림

HSY_mumu 2022. 5. 11. 18:52
728x90

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 입력 문자 보조

 

728x90