java中的序列化和外化

时间:2009-06-22 05:00:27

标签: java serialization

  

可能重复:
  What is the difference between Serializable and Externalizable in Java?

java中的序列化和外化有什么区别?

2 个答案:

答案 0 :(得分:4)

基本上,SerializableExternalizable之间的区别在于,对于实现Serializable的类,对象的序列化会自动处理,而实现{{1}的类无需默认序列化程序的帮助,负责序列化自身。

API规范中为Externalizable接口和Serializable接口提供了更多信息。来自Externalizable界面文档:

  

只有一个类的身份   外部化实例是写入的   序列化流,它是   班级的责任是保存   并恢复其内容   实例。 writeExternal和   readExternal方法   可外部化的界面是   由一个类实现给予   类完全控制格式   和流的内容   对象及其超类型。

Discover the secrets of the Java Serialization API文章讨论了“创建自己的协议:可外部化的接口”部分中的Externalizable接口。

答案 1 :(得分:3)

我建议阅读一篇名为Understand When to Serialize v. Externalize Objects in Java的文章,该文章描述了序列化和外化之间的差异。

首先描述了序列化:

  

Java中对象的序列化   允许您创建一个字节序列   来自已实现的任何对象   Serializable接口;它也是   允许您转换该字节序列   回到一个物体。

接下来,它描述了外部化可能优于序列化的情况:

  

有时候你有   特殊要求   序列化对象。对于   例如,你可能有一些   安全敏感部分   对象,就像密码一样   不想保留和转移   某处。或者,它可能毫无价值   保存引用的特定对象   从主要对象因为它的价值   恢复后会变得毫无价值。

     

你可以控制过程   通过实现序列化   可外部化的界面而不是   序列化。此接口扩展   原始的Serializable接口   并添加writeExternal()和   的readExternal()。这两种方法都会   自动调用你的   对象的序列化和   反序列化,允许你   控制整个过程。

我建议阅读整篇文章,因为上面的摘录并未涵盖细节。本文还包含一些您可能会觉得有用的代码片段。