Serializable
和有什么区别?和 Externalizable
在 Java 中?
最佳答案
要补充其他答案,通过实现 java.io.Serializable
,您可以获得类对象的“自动”序列化功能。无需实现任何其他逻辑,它会正常工作。 Java 运行时将使用反射来确定如何编码和解码您的对象。
在早期版本的 Java 中,反射非常慢,因此序列化大型对象图(例如在客户端-服务器 RMI 应用程序中)有点性能问题。为了处理这种情况,提供了 java.io.Externalizable
接口(interface),它类似于 java.io.Serializable
但具有自定义编写的机制来执行编码和解码功能(你需要在你的类上实现 readExternal
和 writeExternal
方法)。这为您提供了绕过反射性能瓶颈的方法。
在 Java 的最新版本(当然是 1.3 及更高版本)中,反射的性能比以前要好得多,因此这不是什么问题。我怀疑你很难从现代 JVM 的 Externalizable
中获得有意义的好处。
此外,内置的 Java 序列化机制不是唯一的,您可以使用第三方替换,例如 JBoss Serialization,它的速度要快得多,并且是默认的直接替换。
Externalizable
的一大缺点是你必须自己维护这个逻辑 - 如果你在你的类中添加、删除或更改一个字段,你必须更改你的 writeExternal
/readExternal
方法来解释它。
总之,Externalizable
是 Java 1.1 时代的遗物。真的不需要了。
关于java - Java中的可序列化和可外部化有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817853/