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();
}
}
}
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Java' 카테고리의 다른 글
Spring (0) | 2023.05.11 |
---|---|
Java의 Hook Method (0) | 2023.05.10 |
Java의 문자 단위 입출력 - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |
Java의 바이트 단위 입출력 - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |
Java의 입출력 스트림 - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |