Java 中序列化和外部化的区别


序列化和外部化都是将对象转换为字节流并将字节流存储在数据库或内存中的过程。实现 java.io.Serializable 接口的类可以被序列化。另一方面,外部化用于根据应用程序需求进行自定义序列化。外部化扩展了 java.io.Serializable。

序号关键序列化外部化
1
接口
序列化是一个标记接口
外部化包含两个方法 readExternal 和 writeExternal。
2
实现逻辑
实现该接口的类将序列化或持久化 Java 对象的责任交给 JVM。JVM 使用 readObject 和 writeObject 进行序列化
通过覆盖 readExternal 和 writeExternal 方法,外部化将实现逻辑控制权提供给应用程序。
3
忽略变量的方式
在序列化中,JVM 在 Java 对象的序列化和反序列化期间会忽略 transient 变量
程序员可以编写自己的逻辑,以在 Java 对象的外部化过程中忽略某些变量
4
性能
可序列化接口使用反射,导致性能相对较慢。
Externalizable 提供对实现方法的完全控制。
5
具有继承关系的对象序列化
1. 如果超类不可序列化,则子类仍然可以被序列化。
2. 如果子类不可序列化,但超类自动可序列化
我们也可以将此应用于 Externalizable。

Externalizable 示例

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();
   }
}

Serializable 示例

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

更新于: 2019 年 11 月 18 日

3K+ 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.