산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java ObjectInputStream 완전 정복: 역직렬화 실전 가이드

Java ObjectInputStream 클래스

ObjectInputStream으로 Java에서 직렬화된 객체를 읽는 방법을 단계별 예제와 실용적 팁으로 알아봅니다.

java.io 패키지의 ObjectInputStream 클래스는 ObjectOutputStream으로 이전에 작성된 객체를 역직렬화할 수 있게 합니다. 추상 InputStream 클래스를 확장합니다.


ObjectInputStream 작동 원리

직렬화는 Java 객체를 저장하거나 전송할 수 있는 바이트 스트림으로 변환합니다. 역직렬화(역과정)는 ObjectInputStream이 처리하며, 바이트 스트림을 읽어 원래 객체를 재구성합니다.


ObjectInputStream 생성하기

ObjectInputStream을 생성하려면 먼저 클래스를 임포트하고 일반적으로 FileInputStream인 소스에 연결합니다:

// 파일에 연결
FileInputStream fileStream = new FileInputStream("example.dat");
// ObjectInputStream으로 래핑
ObjectInputStream objStream = new ObjectInputStream(fileStream);

인스턴스화되면 objStream은 파일에서 직렬화된 객체를 읽을 수 있습니다.


ObjectInputStream의 핵심 메서드

가장 자주 사용되는 메서드들입니다:


예제 1: 기본 역직렬화

아래는 정수와 문자열을 파일에 쓴 다음 다시 읽는 최소 예제입니다.

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int data1 = 5;
        String data2 = "This is programiz";
        try {
            // 데이터 쓰기
            FileOutputStream fos = new FileOutputStream("file.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeInt(data1);
            oos.writeObject(data2);
            // 데이터 읽기
            FileInputStream fis = new FileInputStream("file.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("Integer data :" + ois.readInt());
            System.out.println("String data :" + ois.readObject());
            oos.close();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

실행 결과

Integer data :5
String data :This is programiz

예제 2: 커스텀 객체 역직렬화

단순 Dog 객체를 직렬화하고 역직렬화합니다. 이 클래스는 작동을 위해 Serializable을 구현해야 합니다.

import java.io.*;

class Dog implements Serializable {
    String name;
    String breed;
    Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Tyson", "Labrador");
        try {
            // 직렬화
            FileOutputStream fos = new FileOutputStream("file.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(dog);
            // 역직렬화
            FileInputStream fis = new FileInputStream("file.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Dog newDog = (Dog) ois.readObject();
            System.out.println("Dog Name: " + newDog.name);
            System.out.println("Dog Breed: " + newDog.breed);
            oos.close();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

실행 결과

Dog Name: Tyson
Dog Breed: Labrador

핵심 포인트:


추가 ObjectInputStream 메서드

메서드설명
available()블로킹 없이 읽을 수 있는 바이트 수를 반환합니다.
mark()스트림의 현재 위치를 표시합니다.
reset()스트림을 가장 최근 표시 위치로 재설정합니다.
skipBytes(int n)n 바이트를 건너뜁니다.
close()스트림을 닫고 리소스를 해제합니다.

더 깊은 통찰을 위해 공식 Java 문서를 방문하세요.

java

  1. Java final 키워드 마스터: 변수, 메서드, 클래스에서의 활용
  2. Java instanceof 연산자 완벽 가이드: 기본 사용법부터 상속, 인터페이스까지
  3. Java 상속 마스터: 개념, 종류, 실전 예제 총정리
  4. Java 정적 중첩 클래스 이해: 용법, 내부 클래스와의 차이, 예제
  5. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  6. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  7. Java 리플렉션 마스터: 런타임에 클래스, 메서드, 필드 검사 및 조작
  8. Java ObjectOutputStream 마스터하기: 직렬화, 메서드, 실전 예제
  9. Java 제네릭 마스터하기: 재사용 가능하고 타입 안전한 코드 작성
  10. java.io로 Java 파일 작업 마스터하기 – 생성, 읽기, 쓰기 및 삭제