Java의 보조 스트림
- 실제 읽기/쓰기 스트림이 아닌 보조 기능을 제공하는 스트림
FilterInputStream
및 FilterOutputStream
은 보조 스트림의 상위 클래스입니다.
- 다른 스트림(기본 스트림 또는 다른 보조 스트림)을 생성자의 매개변수로 사용
- 데코레이터 패턴(Decorator Pattern)으로 주로 구현한다
- 기능을 만들기 위해서는 상속을 주로 쓰지만 이 경우에는 코드가 지저분해지기 때문이다
상위 클래스 생성자
생성자 |
설명 |
protected FilterInputStream과(InputStream in) |
생성자의 매개변수로 InputStream을 받습니다. |
public FilterOutputStream(OutputStream out) |
생성자의 매개변수로 OutputStream을 받습니다. |
InputStreamReader
및 OutputStreamWriter
- 바이트 단위로 읽거나 쓴 데이터를 문자로 변환하는 보조 스트림
FileInputStream
에서 읽은 데이터를 문자로 변환하는 예
public class InputStreamReaderTest {
public static void main(String[] args) {
try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))) {
int i;
while((i = isr.read()) != -1) { //Read into secondary stream.
System.out.print((char)i);
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
BufferedInputStream
및 BufferedOutputStream
- 약 8k의 Array로 I/O 속도를 높일 수 있는 보조 스트림용으로 제공됩니다.
BufferedReader
및 BufferedWriter
는 문자에 대한 I/O 보조 스트림입니다.
public class BufferedStreamTest {
public static void main(String[] args) {
long millisecond = 0;
try(FileInputStream fis = new FileInputStream("a.zip");
FileOutputStream fos = new FileOutputStream("copy.zip");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
millisecond = System.currentTimeMillis();
int i;
while((i = bis.read()) != -1) {
bos.write(i);
}
millisecond = System.currentTimeMillis() - millisecond;
} catch(IOException e) {
e.printStackTrace();
}
System.out.println("It took " + millisecond + " milliseconds to copy the file.");
}
}
DataInputStream
및 DataOutputStream
- 데이터가 메모리에 저장되면서 읽거나 쓰는 스트림.
DataInputStream
메서드:
DataOutputStream
메서드:
public class DataStreamTest {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("data.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeByte(100);
dos.writeChar('A');
dos.writeInt(10);
dos.writeFloat(3.14f);
dos.writeUTF("Test");
} catch(IOException e) {
e.printStackTrace();
}
try(FileInputStream fis = new FileInputStream("data.txt");
DataInputStream dis = new DataInputStream(fis)) {
System.out.println(dis.readByte());
System.out.println(dis.readChar());
System.out.println(dis.readInt());
System.out.println(dis.readFloat());
System.out.println(dis.readUTF());
} catch(IOException e) {
e.printStackTrace();
}
}
}
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>