직렬화와 외부화는 모두 객체를 스트림 바이트로 변환하고 바이트 스트림을 데이터베이스나 메모리에 저장하는 프로세스입니다. 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; }