Serializable和Externalizable在Java中有什么区别?

问题:

Java中的SerializableExternalizable有什么区别?

回答:

要添加到其他答案,通过实现java.io.Serializable,您可以获得类的对象的“自动”序列化功能。没有必要实现任何其他逻辑,它只会工作。 Java运行时将使用反射来找出如何组织和解组对象。
在早期版本的Java中,反射速度非常慢,因此串行化大对象图(例如,在客户端 – 服务器RMI应用程序中)是一个性能问题。为了处理这种情况,提供了java.io.Externalizable接口,就像java.io.Serializable,但是使用自定义机制来执行编组和解组函数(你需要在你的类上实现readExternalwriteExternal方法)。这将为您提供解决反射性能瓶颈的方法。
在最近版本的Java(1.3起,当然),反思的表现远比以前更好,所以这不是一个问题。我怀疑你将很难用现代JVM从Externalizable获得有意义的收益。
此外,内置的Java序列化机制并不是唯一的,您可以获得第三方替换,比如JBoss Serialization,这是更快的,并且是默认的替代品。
Externalizable的一大缺点是,您必须自己维护此逻辑 – 如果您添加,删除或更改课程中的字段,则必须更改writeExternal readExternal方法来解决此问题。
总而言之,Externalizable是Java 1.1天的遗物。真的没有必要了。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between Serializable and Externalizable in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 5 = 2