보조 스트림(Secondary Stream)은 주 스트림을 감싸서 추가적인 기능을 제공하는 스트림입니다. 예를 들어, ObjectOutputStream
은 바이트 스트림 위에 적용되어 객체를 직렬화하고 이를 바이트 스트림으로 처리하는 기능을 제공합니다.
FileInputStream
,FileOutputStream
등)DataInputStream
/ DataOutputStream
클래스 개요DataInputStream
과 DataOutputStream
은 자바에서 바이너리 데이터(이진 데이터)를 처리하기 위한 바이트 스트림 클래스입니다. 이 클래스를 사용하면 자바의 기본 데이터 타입을 효율적으로 바이너리 형식으로 읽고 쓸 수 있습니다. 즉, 정수, 실수, 논리 값과 같은 기본 자료형을 파일에 기록하거나, 파일에서 불러올 수 있습니다.
DataOutputStream
은 데이터를 바이너리 형식으로 파일이나 다른 스트림에 기록합니다. 이 클래스를 사용하면 기본 자료형을 텍스트가 아닌 이진 형식으로 저장할 수 있습니다. 주요 메서드는 각 데이터 타입에 맞는 write 메서드를 제공합니다.
writeInt(int)
: 정수를 바이너리 형식으로 씀.writeDouble(double)
: 실수를 바이너리 형식으로 씀.writeBoolean(boolean)
: 논리 값을 바이너리 형식으로 씀.writeUTF(String)
: 문자열을 UTF-8 형식으로 씀.DataOutputStream dos = null;
try {
dos = new DataOutputStream(new FileOutputStream("./data.dat"));
dos.writeInt(2024); // 정수 쓰기
dos.writeUTF("문자열 형식"); // 문자열 쓰기
dos.writeFloat(1.8f); // 실수 쓰기
System.out.println("출력 완료");
} catch (IOException e) {
System.out.println("[에러] " + e.getMessage());
} finally {
if (dos != null) { try { dos.close(); } catch (IOException e) { }}
}
DataInputStream
은 바이너리 형식으로 저장된 데이터를 읽어, 이를 기본 자료형으로 변환해 줍니다. 파일이나 네트워크에서 받은 이진 데이터를 처리할 때 유용하게 사용할 수 있습니다. 데이터를 기록한 순서대로 읽어야 하며, 이를 어기면 데이터가 잘못 해석될 수 있습니다.
readInt()
: 바이너리로 저장된 정수를 읽음.readFloat()
: 바이너리로 저장된 실수를 읽음.readBoolean()
: 바이너리로 저장된 논리 값을 읽음.readUTF()
: UTF-8 형식으로 저장된 문자열을 읽음.DataInputStream dis = null;
try {
dis = new DataInputStream(new FileInputStream("./data.dat"));
// 데이터를 쓴 순서대로 읽음
System.out.println(dis.readInt()); // 정수 읽기
System.out.println(dis.readUTF()); // 문자열 읽기
System.out.println(dis.readFloat()); // 실수 읽기
} catch (IOException e) {
System.out.println("[에러] " + e.getMessage());
} finally {
if (dis != null) { try { dis.close(); } catch (IOException e) {} }
}
writeInt()
로 기록한 후에는 readInt()
로 읽어야 합니다.DataInputStream
과 DataOutputStream
은 주로 네트워크 프로그래밍이나 파일 크기를 줄여야 할 때, 그리고 파일을 바이너리 형식으로 저장해야 할 때 사용됩니다. 또한 데이터를 효율적으로 처리하고 파일 크기를 줄이면서도, 기본 자료형 데이터를 손실 없이 저장할 수 있습니다.
이와 같은 스트림의 사용은 자바의 기본 자료형을 텍스트가 아닌 바이너리 형식으로 처리해야 할 때 매우 유용하며, 특히 성능이 중요한 파일 입출력 작업이나 네트워크 전송에서 많이 사용됩니다.