Java
Java IO (보조 Stream)
projaewoo
2020. 9. 10. 18:13
보조 Stream
- 스트림의 기능 향상
- 새로운 기능 추가
- 실제로 데이터를 주고받지는 않음
- 보조스트림만으로 입출력 처리 불가
- 따라서, 스트림 생성 -> 보조 스트림 생성
- ex) text.txt 파일 읽기 위해 FileInputStream -> BufferedInputStream 생성
ex)
FileInputStream fis = new FileInputStream("test.txt");
- 먼저 기반스트림 생성
BufferedInputStream bis = new BufferedInputStream(fis);
- 보조스트림 생성
- 기반스트림을 이용해서 생성
bis.read();
- 보조스트림인 BufferedInputStream으로부터 데이터 읽음.
- FileInputStream
- 실제 입력기능 수행
- BufferedInputStream
- 기반스트림에 버퍼만 제공
보조 Stream 종류
입력 | 출력 | 설명 |
FileterInputStream | FilterOutputStream | 필터를 이용한 입출력 처리 |
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 성능향상 |
DataInputStream | DataOutputStream | int, float와 같은 기본형 단위(primitive type)로 데이터를 처리하는 기능 |
ObjectInputStream | ObjectOutputStream | 데이터를 객체단위로 읽고 쓰는데 사용. 주로 파일을 이용하며 객체 직렬화와 관련. |
보조 Stream 특징
- 보조스트림의 close()호출만 하면 기반스트림의 close() 또는 flash() 자동으로 호출됨.
- ex) FilterOutputStream의 자손 : BufferedOutputStream
- BufferedOutputStream의 close()호출하면 FilterOutputStream 자동으로 close().
- ex) FilterOutputStream의 자손 : BufferedOutputStream
바이트기반의 보조스트림
1. FilterInputStream과 FilterOutputStream
- 모든 보조스트림의 조상.
FilterInputStream의 자손.
FilterOutputStream의 자손.
2. BufferedInputStream과 BufferedOutputStream
- 버퍼를 사용하는 보조스트림
- 버퍼 : 바이트 배열
- 스트림의 입출력 효율 향상
- 한 바이트씩 입출력 < 바이트 배열로 입출력
예제
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamEx1 {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("123.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos, 5); //BufferedOutputStream의 버퍼 크기 : 5
for(int i = '1'; i <= '9'; i++) { //파일 123.txt에 1부터 9까지 출력.
bos.write(i);
// bos.flush(); //flush() 없으면 결과값 : 12345. //flush() 있으면 결과값 : 123456789.
}
fos.close();
}catch(IOException e) {
System.out.println(e);
}
}
}
문자기반의 보조스트림
1. BufferedReader과 BufferedWriter
- 버퍼를 이용해서 입출력 효율을 높일 수 있는 역할
2. InputStreamReader과 OutputStreamWriter
- 바이트 기반 스트림을 문자기반 스트림으로 연결시켜주는 역할
- 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업 수행