Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 직렬화와 외부화의 차이점

<시간/>

직렬화와 외부화는 모두 객체를 스트림 바이트로 변환하고 바이트 스트림을 데이터베이스나 메모리에 저장하는 프로세스입니다. java.io.Serializable 인터페이스를 구현하는 클래스는 직렬화될 수 있습니다. 반면에 응용 프로그램의 요구 사항에 따라 사용자 지정 직렬화에 사용되는 외부화입니다. 외부화는 java.io.Serializable을 확장합니다.

Sr. 아니요. 직렬화 외부화
1
인터페이스
직렬화는 마커 인터페이스입니다.
외부화에는 두 가지 방법인 readExternal 및 writeExternal이 포함됩니다.
2
구현 로직
이 인터페이스를 구현하는 클래스는 자바 객체를 직렬화하거나 유지하기 위해 JVM에 책임을 부여합니다. JVM은 직렬화를 위해 readObject 및 writeObject를 사용합니다.
외부화는 readExternal 및 writeExternal 메서드를 재정의하여 애플리케이션에 구현 논리 제어를 제공합니다.
3
변수를 무시하는 방법
직렬화에서 JVM은 Java 객체의 직렬화 및 역직렬화 중에 일시적인 변수를 무시합니다.
프로그래머는 자바 객체를 외부화하는 동안 일부 변수를 무시하는 자체 로직을 작성할 수 있습니다.
4
성능
직렬화 가능한 인터페이스에서 상대적으로 느린 성능을 유발하는 리플렉션을 사용합니다.
Externalizable은 구현 방식을 완전히 제어할 수 있습니다.
5
상속을 통한 객체 직렬화
1. 수퍼 클래스가 직렬화 가능하지 않은 경우 하위 클래스는 계속 직렬화할 수 있습니다.
2. 하위 클래스가 직렬화되지 않았지만 상위 클래스가 자동으로 직렬화되는 경우
이를 외부화 가능에도 적용할 수 있습니다.

외부화 가능한 예

class ExternalizableExample implements Externalizable {
   Integer id;
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeInt( id );
   }
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
      this.id = in.readInt();
   }
}

직렬화의 예

class SerializableExample implements Serializable {
   private static final long serialVersionUID = 5081877L;
   String name;
}