【问题标题】:customization is possible with serialization then why Externalizable at all?序列化可以进行定制,那么为什么要 Externalizable 呢?
【发布时间】:2014-03-31 11:11:24
【问题描述】:

我在SO阅读了这些文章:

Externalizable or Serializable?,

What is the difference between Serializable and Externalizable in Java?.

但我的问题是,与 serializable 相比,通过实施 Externalizable 可以获得哪些额外的自定义。

通过提供我们自己的writeObjectreadObject 实现,可以自定义实现SerializableclassSerialization。那么使用Externalizable 并自定义ReadExternalwriteExternal 实现的目的是什么。使用Externalizable 的真正好处是什么?我读过各种链接,上面写着Externalizable 支持自定义serialization(包括上面的那个)。但我没有看到Externalizable 是明显赢家的例子,或者使用Serializable 无法完成的事情。很高兴看到一个例子。

为了更清楚起见,以下 sn-p 是从here 中提取的:

class 实现Serializable interface 时,它会向JVM 提供这些classes 中的instances 可以序列化的信息。除此之外,JVM 有一个特别说明

“在实现Serializable的类中查找以下两个方法。如果找到,则调用它并继续序列化过程,否则直接遵循标准序列化协议”

所以这给了我们写这两个方法的机会:

private void writeObject(ObjectOutputStream out) throws IOException;, private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

在实现SerializableClass 内部,您将获得serialization 进程的挂钩。您可以在这两个方法中编写自定义代码,并自定义serialization 的标准行为。

【问题讨论】:

    标签: java serialization serializable externalizable


    【解决方案1】:

    Serializable 和 Externalizable 的主要区别在于 Serializable 会自动为您处理基类。 Externalizable 将整个工作交给您。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2021-04-14
      相关资源
      最近更新 更多