반응형
보조 스트림
- 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림
- FilterInputStream과 FileOutputStream이 보조 스트림의 상위 클래스들
- 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 다른 보조 스트림)을 가짐
- Decorator Pattern으로 구현 됨
상위 클래스 생성자
생성자 | 설명 |
protected FilterInputStream과 (InputStream in) | 생성자의 매개변수로 InputStream을 받는다. |
public FilterOutputStream(OutputStream out) | 생성자의 매개변수로 OutputStream을 받는다. |
InputStreamReader와 OutputStreamWriter
바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림
FileInputStream으로 읽은 자료를 문자로 변환해주는 예
InputStreamReaderTest.java
package ch63;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class InputStreamReaderTest {
public static void main(String[] args) {
try (InputStreamReader irs = new InputStreamReader(new FileInputStream("reader.txt"))){
int i;
while ((i = irs.read()) != -1) { // 보조 스트림으로 문자를 읽어온다
System.out.print((char)i);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
BufferedInputStream과 BufferedOutputStream
- 약 8k의 배열이 제공되어 입출력이 빠르게 하는 기능이 제공되는 보조 스트림
- BufferedReader와 BufferedWriter는 문자용 입출력 보조 스트림
BufferedInputStream과 BufferedOutputStream을 이용하여 파일 복사하는 예
FileCopyTest.java
package ch63;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class FileCopyTest {
public static void main(String[] args) throws IOException {
long milisecond = 0;
// Buffered를 사용하면 좀 더 빨리 동작한다
try (BufferedInputStream bis = new BufferedInputStream( new FileInputStream("a.zip"));
BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream("copy.zip"))){
milisecond = System.currentTimeMillis(); // 현재 시간
int i;
while ((i = bis.read()) != -1) {
bos.write(i);
}
milisecond = System.currentTimeMillis() - milisecond; // 걸린 시간
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(milisecond + " 소요되었습니다.");
// 보조스트림 에 (동작은 안한다)
// Socket socket = new Socket();
//
// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//
// br.readLine(); // 한 쭐 읽기
}
}
반응형
'언어 > JAVA' 카테고리의 다른 글
입출력 클래스(File, RandomAccessFile) (0) | 2021.05.23 |
---|---|
DataStream, 직렬화 (0) | 2021.05.23 |
문자단위 입출력 스트림 (0) | 2021.05.23 |
OutputSteam (출력 스트림) (0) | 2021.05.23 |
바이트 단위 입출력 스트림 (0) | 2021.05.23 |