在阅读http://geekexplains.blogspot.com/2008/06/diff-between-externalizable-and.html的文章后,我了解到Externalizable比Serializalable更好,因为它提供了更好的代码控制,而且速度更快。所以Externalizable应该被优先考虑,而不是Serializable提供的类定义没有改变。但是当我看到任何项目我只使用Serializable接口。它可能是无知或Serializalable提供我缺少的一些其他优势?Externalizable或Serializable?
回答
Serializable的优点是实现起来非常简单,并且可以灵活地进行更改(在大多数情况下,您只需更新serialversionUID即可)。 Externalizable需要程序员真正做好工作,并且每当班级内容发生变化时都要做更多的工作。正如你链接的文章指出实现Externalizable也容易出错。所以从利用有限的程序员时间的角度来看,通常Serializable是更好的选择。
关于如何设计Serializable和Externalizable的好处是,您可以推迟实现Externalizable的决定,直到它变得明显存在性能问题,并且您可以选择性地仅对那些出现问题的类实现它。
同意Serializable是它实现起来非常容易,但它的速度比Externalizable慢。正如我所说,如果类定义不会改变,我们应该按照我的思路去使用Externalizable。只是因为它容易实现而不以牺牲性能为代价,而不是我们应该寻找的方式。 –
@Mohit:编程比表现更多。如果事情不是瓶颈,那么优化它是浪费时间。假设你有一个带有序列化域对象的集群Web应用程序,这些对象必须在会话中进行,节点与高速网络链接,微观优化其序列化可能无济于事。 –
Serializable
是一个标记接口,指示可以将实例写入输出流并回读。您不必编写代码(您只需确保所有字段本身都是Serializable
)。
Externalizable
是一个Serializable
,alos提供自定义(de)序列化代码。
我认识了外部化比Serializalable
该链接不说更好。在这种情况下没有“更好的”,它是课程的马匹。如果您准备在项目的整个生命周期内继续编写更多的代码,那么Externalizable在某些意义上可能会更好,例如空间和时间成本。如果代码的代价是一个问题,那么Serializable就会更好。而且这些不是唯一的选择。
- 1. PropertyModel或Serializable对象?
- 2. 何时使用Externalizable而不是writeReplace + readResolve?
- 3. 使用MarshalByRefObject的[Serializable]属性或子类?
- 4. SonarLint V3:“Serializable”类中的字段对于List接口应该是transient或serializable
- 5. c#中的[Serializable]和[Serializable()]有区别吗?
- 6. Exception,Return,Serializable,
- 7. JAXB - Serializable接口
- 8. Android Parcelable和Serializable
- 9. TABLOCKX与SERIALIZABLE
- 10. Python Gmail API'not JSON serializable'
- 11. JAXB - List <Serializable>?
- 12. DTO实现Serializable接口
- 13. 为什么java.lang.Void不是Serializable?
- 14. 如何为Serializable生成serialVersionUID?
- 15. 将[Serializable]更改为[DataContract]
- 16. Serializable是否妨碍性能?
- 17. Serializable是什么意思?
- 18. 的getString实现Serializable接口
- 19. Hibernate session.contains(Class clazz,Serializable id)
- 20. 为什么不需要使用[DataContract]或[Serializable]属性进行序列化标记?
- 21. 推荐的代码风格:case对象Foo或对象Foo扩展Serializable?
- 22. 我可以深入克隆未标记为ICloneable或Serializable的c#对象吗?
- 23. 在Android中使用Serializable不好?
- 24. 在值对象中实现Serializable?
- 25. 如何在Lagom中使Java可选Serializable?
- 26. 交易SERIALIZABLE,奇怪的行为?
- 27. 如何使用@serializable scala对象?
- 28. ProGuard不会完全混淆Serializable类
- 29. 序列化不与Serializable接口工作
- 30. 序列化Serializable类中的RSAKeyValue属性
你可能会发现你对这个有趣的速度感兴趣。 http://vanillajava.blogspot.com/2011/08/avoiding-java-serialization-to-increase.html –
我已经绘制了一个比较各种序列化选项的基准:http:// java-is-the-new- c.blogspot.de/2013/10/still-using-externalizable-to-get.html –
'Serializable'将代码保存在'Externalizable'上的唯一情况是当一个类的所有非'transnsient'实例字段是它是一个很好的逻辑表示。如果没有,那么接受默认的序列化会比长时间使用'Externalizable'来设计一个好的序列表单要花费更多的代码和维护时间。 – scottb