如果我们实施Serializable,我们不需要它。为什么这个差异呢?它与序列化的实际机制有什么关系?
答案 0 :(得分:6)
可以在http://www.jusfortechies.com/java/core-java/externalization.php找到详尽的解释(尽管可能会改进文章的语法)。简短的回答,以供将来参考,以防链接页面消失:
Externalizable是一个扩展Serializable的接口。但是,与Serializable相反,只是读取序列化的字节流不会恢复对象,但会调用公共构造函数,只有在创建了对象后,才会恢复其状态。这使得恢复更有效率。
修改:另请参阅What is the difference between Serializable and Externalizable in Java?。
答案 1 :(得分:1)
这主要用于缓存目的。为了在流中反序列化,您需要说明您希望对象反序列化的方式,因此Externalizable
中的合同提供了两种方法界面:writeExternal
和readExternal
。请注意Externalizable
扩展Serializable
,因此您不一定需要实现Serializable
接口(尽管它是标记接口,并且没有实际实现的方法)。
有关示例实现,请查看MimeType。
答案 2 :(得分:0)
使用Externalizable接口时需要公共的无参数构造函数。
因为在Serializable的情况下
但是在Externalizable的情况下