原文: 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接口有关的评论部分中提出您的问题。
学习愉快!
