Java 可外部化还是可序列化?

Java 可外部化还是可序列化?,java,serialization,Java,Serialization,在阅读了上的文章之后,我了解到Externalizable比Serializable更好,因为它提供了更好的代码控制,而且速度更快。因此,如果类定义没有更改,那么应该优先选择Externalizable而不是Serializable。但是当我在任何项目中看到我发现只使用Serializable接口。是无知还是Serializable提供了我所缺少的其他优势?Serializable的优势在于它非常容易实现,并且能够适应变化(在大多数情况下,您所要做的就是更新serialversionUID)。E

在阅读了上的文章之后,我了解到Externalizable比Serializable更好,因为它提供了更好的代码控制,而且速度更快。因此,如果类定义没有更改,那么应该优先选择Externalizable而不是Serializable。但是当我在任何项目中看到我发现只使用Serializable接口。是无知还是Serializable提供了我所缺少的其他优势?

Serializable的优势在于它非常容易实现,并且能够适应变化(在大多数情况下,您所要做的就是更新serialversionUID)。Externalizable要求程序员实际执行工作,并在每次类内容更改时执行更多工作。正如您链接到的文章所指出的,实现Externalizable也容易出错。因此,从利用有限程序员时间的角度来看,通常可序列化是一个更好的选择


Serializable和Externalizable设计的好处在于,您可以推迟执行Externalizable的决定,直到出现明显的性能问题,并且您可以有选择地只为有问题的类实现它。

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

Externalizable
是alos提供自定义(反)序列化代码的
Serializable

我知道可外化比可序列化好


那个链接并没有这么说。在这种情况下,没有“更好”的了,这是马匹的职业生涯。如果您准备在项目的生命周期内不断编写更多的代码,Externalizable在某些意义上可能会“更好”,例如空间和时间成本。如果代码的成本是一个问题,那么可串行化是一个更好的选择。这些并不是唯一的选择。

同意序列化是一种非常容易实现的方法,但它也比外部化慢。正如我所说的,如果类定义没有改变,我们应该按照我的想法使用Externalizable。仅仅因为它易于实现而牺牲性能不是我们应该寻找的方式。@Mohit:编程不仅仅是性能。如果某个东西不是瓶颈,那么优化它就是浪费时间。假设您有一个群集webapp,其中包含必须在会话中运行的可序列化域对象,节点与高速网络相连,微优化它们的序列化可能不会带来回报。您可能会发现,您对速度的关注非常有趣。我在这里绘制了一个比较各种序列化选项的基准:当
Serializable
保存代码而不是
Externalizable
时,唯一的情况是类的所有非
瞬态
实例字段都是它的良好逻辑表示。如果没有,那么接受默认序列化可能会比使用
Externalizable
设计一个好的串行表单花费更多的代码和长期维护时间。