有什么区别Serializable http://java.sun.com/javase/6/docs/api/java/io/Serializable.html and Externalizable http://java.sun.com/javase/6/docs/api/java/io/Externalizable.html在Java中?
要添加到其他答案,请执行java.io.Serializable
,您可以获得类对象的“自动”序列化功能。不需要实现任何其他逻辑,它就可以工作。 Java 运行时将使用反射来确定如何编组和解组对象。
在 Java 的早期版本中,反射非常慢,因此序列化大型对象图(例如在客户端-服务器 RMI 应用程序中)会产生一些性能问题。为了处理这种情况,java.io.Externalizable
提供了接口,就像java.io.Serializable
但使用自定义编写的机制来执行编组和解组功能(您需要实现readExternal
and writeExternal
类中的方法)。这为您提供了绕过反射性能瓶颈的方法。
在最新版本的 Java(当然是 1.3 以后)中,反射的性能比以前好得多,因此这不再是一个问题。我怀疑你很难从中获得有意义的好处Externalizable
使用现代 JVM。
此外,内置的 Java 序列化机制并不是唯一的机制,您还可以使用第三方替代品,例如 JBoss Serialization,它的速度要快得多,并且是默认值的直接替代品。
一个很大的缺点是Externalizable
是你必须自己维护这个逻辑 - 如果你添加、删除或更改类中的字段,你必须更改你的writeExternal
/readExternal
方法来解释它。
总之,Externalizable
是 Java 1.1 时代的遗迹。真的没有必要再这样了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)