【发布时间】:2019-11-19 18:07:47
【问题描述】:
我正在学习 java 序列化,我有一个疑问,如果可以通过覆盖类中的 writeObject() 和 readObject() 方法来自定义默认序列化过程,那么 Externalizable 接口有什么用?什么场景需要?
【问题讨论】:
-
从哪里覆盖?那些没有在 Object 类中定义。如果你想自定义一个对象的序列化,那么它应该实现
Externalizable来自定义序列化,覆盖writeExternal(ObjectOutput out)和readExternal(ObjectInput in)使其成为Serializable。除非任何对象可序列化,否则它不能通过网络发送或与任何流一起写入文件。如果您尝试这样做,它将抛出NotSerializableException -
@Nitin 这不正确。也可以提供自定义
readObject()/writeObject()方法而不使用Externalizable,这就是问题所在。 -
@OP
Externalizable一方面让你负责序列化超类的状态,另一方面没有默认行为。 -
user7294900 的回答在这种情况下有效。
-
有效但毫无用处。副本中的答案要好得多。
标签: java serialization serializable externalizable