企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java 中`Externalizable`与`Serializable`之间的区别 > 原文: [https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/](https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/) 知道`Externalizable`与`Serializable`之间的差异在两个方面都很重要,一个是可以作为面试问题询问,另外一个是您可以利用该知识做出更明智的决策,将序列化应用到您的应用中来追求性能提升。 ## 1\. `Externalizable`与`Serializable`之间的区别 让我们列出 Java 中[`Externalizable`](https://docs.oracle.com/javase/8/docs/api/java/io/Externalizable.html)和[`Serializable`](https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)接口之间的主要区别。 | `Externalizable` | `Serializable` | | --- | --- | | `Serializable`是标记接口,即不包含任何方法。 | `Externalizable`接口包含实现类必须覆盖的两个方法`writeExternal()`和`readExternal()`。 | | `Serializable`接口将序列化的职责传递给 JVM 及其默认算法。 | `Externalizable`向程序员提供串行化逻辑的控制-编​​写自定义逻辑。 | | 通常,默认序列化易于实现,但具有较高的性能成本。 | 使用`Externalizable`完成的序列化为程序员增加了更多责任,但通常会带来更好的性能。 | | 很难分析和修改类结构,因为任何更改都可能会破坏序列化。 | 由于可以完全控制序列化逻辑,因此分析和修改类结构更加容易。 | | 默认序列化不调用任何类构造器。 | 使用`Externalizable`接口时,需要一个公共的无参数构造器。 | 请注意,`Externalizable`接口是`Serializable`的子接口,即`Externalizable extends Serializable`。 因此,如果任何类实现`Externalizable`接口并覆盖其`writeExternal()`和`readExternal()`方法,则这些方法优先于 JVM 提供的默认序列化机制。 > 阅读更多:[如何在 Java 中覆盖默认的序列化机制](https://howtodoinjava.com/java/serialization/custom-serialization-readobject-writeobject/) ## 2\. 阅读有关`Externalizable`与`Serializable`的更多信息 * [使用 Java 中的`Externalizable`特性的更高效的序列化](//howtodoinjava.com/java/serialization/java-externalizable-example/) * [Java `Serializable`接口实现指南](//howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/) * [Java 中反序列化过程如何发生?](//howtodoinjava.com/java/serialization/how-deserialization-process-happen-in-java/) 请在与 **Java** 中的`Externalizable`与`Serializable`接口有关的评论部分中提出您的问题。 学习愉快!