2011-08-28 36 views
5

在阅读http://geekexplains.blogspot.com/2008/06/diff-between-externalizable-and.html的文章后,我了解到Externalizable比Serializalable更好,因为它提供了更好的代码控制,而且速度更快。所以Externalizable应该被优先考虑,而不是Serializable提供的类定义没有改变。但是当我看到任何项目我只使用Serializable接口。它可能是无知或Serializalable提供我缺少的一些其他优势?Externalizable或Serializable?

+1

你可能会发现你对这个有趣的速度感兴趣。 http://vanillajava.blogspot.com/2011/08/avoiding-java-serialization-to-increase.html –

+0

我已经绘制了一个比较各种序列化选项的基准:http:// java-is-the-new- c.blogspot.de/2013/10/still-using-externalizable-to-get.html –

+0

'Serializable'将代码保存在'Externalizable'上的唯一情况是当一个类的所有非'transnsient'实例字段是它是一个很好的逻辑表示。如果没有,那么接受默认的序列化会比长时间使用'Externalizable'来设计一个好的序列表单要花费更多的代码和维护时间。 – scottb

回答

6

Serializable的优点是实现起来非常简单,并且可以灵活地进行更改(在大多数情况下,您只需更新serialversionUID即可)。 Externalizable需要程序员真正做好工作,并且每当班级内容发生变化时都要做更多的工作。正如你链接的文章指出实现Externalizable也容易出错。所以从利用有限的程序员时间的角度来看,通常Serializable是更好的选择。

关于如何设计Serializable和Externalizable的好处是,您可以推迟实现Externalizable的决定,直到它变得明显存在性能问题,并且您可以选择性地仅对那些出现问题的类实现它。

+0

同意Serializable是它实现起来非常容易,但它的速度比Externalizable慢。正如我所说,如果类定义不会改变,我们应该按照我的思路去使用Externalizable。只是因为它容易实现而不以牺​​牲性能为代价,而不是我们应该寻找的方式。 –

+3

@Mohit:编程比表现更多。如果事情不是瓶颈,那么优化它是浪费时间。假设你有一个带有序列化域对象的集群Web应用程序,这些对象必须在会话中进行,节点与高速网络链接,微观优化其序列化可能无济于事。 –

4

Serializable是一个标记接口,指示可以将实例写入输出流并回读。您不必编写代码(您只需确保所有字段本身都是Serializable)。

Externalizable是一个Serializable,alos提供自定义(de)序列化代码。

2

我认识了外部化比Serializalable

该链接不说更好。在这种情况下没有“更好的”,它是课程的马匹。如果您准备在项目的整个生命周期内继续编写更多的代码,那么Externalizable在某些意义上可能会更好,例如空间和时间成本。如果代码的代价是一个问题,那么Serializable就会更好。而且这些不是唯一的选择。

相关问题