【发布时间】:2011-12-25 02:57:33
【问题描述】:
如果我们正在实现 Serializable,则不需要它。那么为什么会有这种差异呢?它与序列化的实际机制有什么关系?
【问题讨论】:
标签: java serialization
如果我们正在实现 Serializable,则不需要它。那么为什么会有这种差异呢?它与序列化的实际机制有什么关系?
【问题讨论】:
标签: java serialization
可以在http://www.jusfortechies.com/java/core-java/externalization.php 上找到详尽的解释(尽管文章的语法可能会有所改进)。简短的答案,以供将来参考,以防链接页面消失:
Externalizable 是一个扩展 Serializable 的接口。然而,与 Serializable 不同,对象并不能通过读取序列化的字节流来恢复,而是调用公共构造函数,并且只有在创建对象后,才会恢复其状态。这使得恢复更有效率。
编辑:另见What is the difference between Serializable and Externalizable in Java?。
【讨论】:
readExternal) 在构造函数返回后在新创建的对象上调用。
这主要用于缓存目的。为了跨流反序列化,您需要说明您希望对象如何反序列化,因此Externalizable接口中的合约提供了两种方法: writeExternal 和 readExternal。注意Externalizable扩展了Serializable,所以你不一定需要实现Serializable接口(虽然它是一个标记接口,并没有实际实现的方法)。
有关示例实现,请查看MimeType。
【讨论】:
使用 Externalizable 接口时需要公共的无参数构造函数。
因为在Serializable的情况下
但如果是外部化
【讨论】: