原文: https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/
知道Externalizable
与Serializable
之间的差异在两个方面都很重要,一个是可以作为面试问题询问,另外一个是您可以利用该知识做出更明智的决策,将序列化应用到您的应用中来追求性能提升。
1. Externalizable
与Serializable
之间的区别
让我们列出 Java 中Externalizable
和Serializable
接口之间的主要区别。
Externalizable |
Serializable |
---|---|
Serializable 是标记接口,即不包含任何方法。 |
Externalizable 接口包含实现类必须覆盖的两个方法writeExternal() 和readExternal() 。 |
Serializable 接口将序列化的职责传递给 JVM 及其默认算法。 |
Externalizable 向程序员提供串行化逻辑的控制-编写自定义逻辑。 |
通常,默认序列化易于实现,但具有较高的性能成本。 | 使用Externalizable 完成的序列化为程序员增加了更多责任,但通常会带来更好的性能。 |
很难分析和修改类结构,因为任何更改都可能会破坏序列化。 | 由于可以完全控制序列化逻辑,因此分析和修改类结构更加容易。 |
默认序列化不调用任何类构造器。 | 使用Externalizable 接口时,需要一个公共的无参数构造器。 |
请注意,Externalizable
接口是Serializable
的子接口,即Externalizable extends Serializable
。 因此,如果任何类实现Externalizable
接口并覆盖其writeExternal()
和readExternal()
方法,则这些方法优先于 JVM 提供的默认序列化机制。
阅读更多:如何在 Java 中覆盖默认的序列化机制
2. 阅读有关Externalizable
与Serializable
的更多信息
请在与 Java 中的Externalizable
与Serializable
接口有关的评论部分中提出您的问题。
学习愉快!