Java Data Input/Output Stream

유방현·2024년 10월 28일

1. 보조 스트림 개요

1.1 정의

  • 주 스트림을 감싸서 추가 기능을 제공하는 스트림
  • 실제 데이터 입출력은 주 스트림이 담당
  • 데이터 가공, 변환, 성능 향상 기능 제공

1.2 주요 특징

// 보조 스트림 기본 구조
MainStream mainStream = new MainStream();
SecondaryStream secondaryStream = new SecondaryStream(mainStream);

2. DataOutputStream

2.1 주요 기능

  • 기본 데이터 타입을 바이너리 형식으로 출력
  • 데이터를 이진 형식으로 파일에 저장
  • 네트워크 전송 시 데이터 직렬화

2.2 주요 메서드

public class DataOutputStreamExample {
    public void writeData() throws IOException {
        try (DataOutputStream dos = new DataOutputStream(
                new FileOutputStream("data.bin"))) {
            // 기본 데이터 타입 쓰기
            dos.writeInt(100);            // 정수 쓰기
            dos.writeDouble(3.14);        // 실수 쓰기
            dos.writeBoolean(true);       // 논리값 쓰기
            dos.writeUTF("Hello");        // UTF-8 문자열 쓰기
        }
    }
}

3. DataInputStream

3.1 주요 기능

  • 바이너리 형식의 데이터를 기본 타입으로 읽기
  • 파일이나 네트워크에서 전송된 이진 데이터 처리
  • DataOutputStream으로 작성된 데이터 읽기

3.2 주요 메서드

public class DataInputStreamExample {
    public void readData() throws IOException {
        try (DataInputStream dis = new DataInputStream(
                new FileInputStream("data.bin"))) {
            // 기본 데이터 타입 읽기
            int number = dis.readInt();           // 정수 읽기
            double value = dis.readDouble();      // 실수 읽기
            boolean flag = dis.readBoolean();     // 논리값 읽기
            String text = dis.readUTF();          // UTF-8 문자열 읽기
        }
    }
}

4. 사용 목적과 장점

4.1 주요 용도

  1. 기본 데이터 타입의 효율적 처리

    • 바이너리 형식으로 저장하여 공간 효율성 향상
    • 데이터 처리 속도 향상
  2. 네트워크 통신

    • 데이터 직렬화로 효율적인 전송
    • 기본 타입의 네트워크 전송 용이

4.2 장점

  • 데이터 크기 최적화
  • 처리 속도 향상
  • 타입 안정성 보장

5. 주의사항

5.1 데이터 순서

// 쓰기 순서
dos.writeInt(100);
dos.writeDouble(3.14);
dos.writeUTF("Hello");

// 읽기 순서 (반드시 쓰기 순서와 동일해야 함)
int num = dis.readInt();
double val = dis.readDouble();
String str = dis.readUTF();

5.2 호환성 고려사항

  1. 바이너리 데이터 특성

    • 텍스트 에디터로 직접 읽기 불가
    • 전용 프로그램으로만 해석 가능
  2. 플랫폼 독립성

    • 바이트 순서(Byte Order) 고려
    • 데이터 형식 호환성 확인

6. 실전 활용 예제

6.1 파일 입출력

public class DataStreamExample {
    public void saveData(Person person) throws IOException {
        try (DataOutputStream dos = new DataOutputStream(
                new FileOutputStream("person.dat"))) {
            dos.writeUTF(person.getName());
            dos.writeInt(person.getAge());
            dos.writeDouble(person.getSalary());
        }
    }

    public Person loadData() throws IOException {
        try (DataInputStream dis = new DataInputStream(
                new FileInputStream("person.dat"))) {
            String name = dis.readUTF();
            int age = dis.readInt();
            double salary = dis.readDouble();
            return new Person(name, age, salary);
        }
    }
}

0개의 댓글