Externalizable 与 Serializable 有何不同?

Raj*_*Raj 5 java serialization deserialization externalizable

我读到了

Externalizable 为我们提供了 writeExternal() 和 readExternal() 方法,这使我们可以灵活地控制 Java 序列化机制,而不是依赖于 Java 的默认序列化。

但是,如果我实现了 Serializable 并覆盖,readObject(), writeObject(), 那么它是否也意味着我正在自定义序列化过程?

它有什么不同?

谢谢。

Pra*_*ker 5

Externalizable 和 Serializable 的区别

  1. 在 Serializable 的情况下,使用默认的序列化过程。而在外部化自定义序列化过程的情况下,由应用程序实现。
  2. JVM 回调 java.io.Externalizalbe 接口的 readExternel() 和 writeExternal() 以将对象恢复和写入持久化。
  3. 可外部化的接口为应用程序提供了对序列化过程的完全控制。
  4. readExternal() 和 writeExternal() 取代 writeObject 和 readObject 方法的任何特定实现。

虽然 Externalizable 提供了完整的控制,但它也给序列化超类型状态和处理 Java 中的瞬态变量和静态变量的默认值带来了挑战。如果使用得当,Externalizable 接口可以提高序列化过程的性能。

所以去外部化接口

当您对对象的序列化有特殊要求时。例如,您可能有对象的某些安全敏感部分,例如密码,您不想将其保留并转移到某处。或者,保存从主对象引用的特定对象可能毫无价值,因为它的值在恢复后将变得毫无价值。

  • @Prabhaker...你不认为使用自定义序列化(writeObject 和 readObject)可以实现同样的目标吗? (4认同)