【问题标题】:Externalizable or Serializable?可外部化还是可序列化?
【发布时间】:2011-11-05 11:37:33
【问题描述】:

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

【问题讨论】:

  • 您可能会发现这很有趣,您关心的是速度。 vanillajava.blogspot.com/2011/08/…
  • 我在这里绘制了一个比较各种序列化选项的基准:java-is-the-new-c.blogspot.de/2013/10/…
  • SerializableExternalizable 上保存代码的唯一情况是类的所有非transient 实例字段都是它的良好逻辑表示。如果不是,那么从长远来看,接受默认序列化可能会比您一开始就使用Externalizable 设计一个好的序列化表单花费更多的代码和维护时间。

标签: java serialization


【解决方案1】:

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

关于 Serializable 和 Externalizable 的设计方式的好处是,您可以推迟实施 Externalizable 的决定,直到明显存在性能问题,并且您可以选择性地仅对存在问题的类实施它。

【讨论】:

  • 同意 Serializable 是非常容易实现的。但它也比 Externalizable 慢。正如我所说,如果类定义没有改变,我们应该按照我的想法使用 Externalizable。只是因为它易于实现但以性能为代价并不是我们应该寻找的方式。
  • @Mohit:编程不仅仅是性能。如果某些东西不是瓶颈,那么优化它就是浪费时间。假设您有一个集群 web 应用程序,其中包含必须进入会话的可序列化域对象,节点与高速网络链接,微优化它们的序列化可能不会得到回报。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我知道 Externalizable 比 Serializalable 更好

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

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 2015-02-21
      • 2011-10-31
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多