Raj*_*Raj 5 java serialization deserialization externalizable
我读到了
Externalizable 为我们提供了 writeExternal() 和 readExternal() 方法,这使我们可以灵活地控制 Java 序列化机制,而不是依赖于 Java 的默认序列化。
但是,如果我实现了 Serializable 并覆盖,readObject(), writeObject(), 那么它是否也意味着我正在自定义序列化过程?
它有什么不同?
谢谢。
Externalizable 和 Serializable 的区别
- 在 Serializable 的情况下,使用默认的序列化过程。而在外部化自定义序列化过程的情况下,由应用程序实现。
- JVM 回调 java.io.Externalizalbe 接口的 readExternel() 和 writeExternal() 以将对象恢复和写入持久化。
- 可外部化的接口为应用程序提供了对序列化过程的完全控制。
- readExternal() 和 writeExternal() 取代 writeObject 和 readObject 方法的任何特定实现。
虽然 Externalizable 提供了完整的控制,但它也给序列化超类型状态和处理 Java 中的瞬态变量和静态变量的默认值带来了挑战。如果使用得当,Externalizable 接口可以提高序列化过程的性能。
所以去外部化接口
当您对对象的序列化有特殊要求时。例如,您可能有对象的某些安全敏感部分,例如密码,您不想将其保留并转移到某处。或者,保存从主对象引用的特定对象可能毫无价值,因为它的值在恢复后将变得毫无价值。