>  기사  >  Java  >  Java의 직렬화 및 역직렬화

Java의 직렬화 및 역직렬화

王林
王林원래의
2023-06-08 08:01:091809검색

Java의 직렬화 및 역직렬화

직렬화는 객체의 상태를 네트워크를 통해 전송하거나 디스크에 영구적으로 저장할 수 있도록 객체의 상태를 바이트 스트림으로 변환하는 프로세스입니다. 역직렬화는 직렬화된 바이트 스트림을 객체로 복원하는 프로세스입니다. Java에서는 직렬화 및 역직렬화는 ObjectInputStream 및 ObjectOutputStream을 통해 구현됩니다.

연재가 왜 필요한가요?

현대 애플리케이션에서는 객체의 상태를 서로 다른 시스템, 프로세스 및 스레드 간에 전송해야 하는 경우가 많습니다. 예를 들어, 분산 시스템에서는 개체를 서로 다른 서버 간에 전송해야 할 수도 있습니다. 또 다른 예는 개체를 캐시에 저장할 때 디스크에 저장할 수 있도록 개체를 직렬화해야 하는 경우입니다.

Java의 직렬화

Java는 직렬화를 구현하기 위한 직렬화 가능 인터페이스를 제공합니다. 직렬화 가능 인터페이스는 메소드가 없는 마커 인터페이스일 뿐이며 컴파일러에게 이 클래스가 직렬화 가능하다는 것을 알려줄 뿐입니다. 클래스가 직렬화 가능 인터페이스를 구현하는 경우 해당 클래스의 객체를 직렬화할 수 있습니다. 예:

public class Person implements Serializable {
  private static final long serialVersionUID = 1L;
  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }
}

위의 예에서 Person 클래스는 직렬화 가능 인터페이스를 구현하여 클래스가 직렬화될 수 있음을 나타냅니다.

Java의 역직렬화

Java의 역직렬화는 직렬화된 바이트 스트림을 객체로 복원하는 프로세스입니다. 역직렬화는 ObjectInputStream 클래스를 사용하여 구현할 수 있습니다. 예:

try {
  FileInputStream fileIn = new FileInputStream("person.ser");
  ObjectInputStream in = new ObjectInputStream(fileIn);
  Person person = (Person) in.readObject();
  in.close();
  fileIn.close();
} catch (IOException i) {
  i.printStackTrace();
} catch (ClassNotFoundException c) {
  c.printStackTrace();
}

위의 예에서는 먼저 FileInputStream 개체를 만든 다음 이를 ObjectInputStream 생성자에 전달하여 ObjectInputStream 개체를 만듭니다. 그런 다음 readObject() 메서드를 사용하여 ObjectInputStream에서 객체를 읽습니다. 마지막으로 ObjectInputStream과 FileInputStream을 닫습니다.

역직렬화할 때 직렬화된 클래스가 있어야 한다는 점에 유의해야 합니다. 직렬화된 클래스가 없으면 ClassNotFoundException 예외가 발생합니다.

Java의 직렬화 및 역직렬화는 매우 중요하므로 서로 다른 시스템, 프로세스 및 스레드 간에 객체를 전달할 수 있습니다. 동시에 Java는 객체의 직렬화 및 역직렬화 동작을 제어하기 위한 임시 메서드, writeObject() 및 readObject() 메서드와 같은 몇 가지 메서드도 제공합니다. 직렬화 및 역직렬화는 성능에 큰 영향을 미치므로 적절한 경우에는 사용을 피해야 합니다.

위 내용은 Java의 직렬화 및 역직렬화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.