【发布时间】:2010-11-04 18:15:24
【问题描述】:
【问题讨论】:
-
-1 重复(见 Macarse 的回答)
标签: java serialization
【问题讨论】:
标签: java serialization
基本上,Serializable 和 Externalizable 之间的区别在于,对于实现 Serializable 的类,对象的序列化是自动处理的,而实现 Externalizable 的类负责对自身进行序列化,无需默认序列化程序的帮助。
API 规范中提供了更多关于Externalizable 接口和Serializable 接口的信息。来自Externalizable接口文档:
只有类的标识 Externalizable 实例写在 序列化流,它是 类的责任保存 并恢复其内容 实例。 writeExternal 和 读取外部方法 可外部化的接口是 由一个类实现以给出 类完全控制格式 和流的内容 对象及其超类型。
Discover the secrets of the Java Serialization API 文章在“创建您自己的协议:可外部化接口”部分讨论了Externalizable 接口。
【讨论】:
我建议阅读一篇名为 Understand When to Serialize v. Externalize Objects in Java 的文章,该文章描述了序列化和外部化之间的区别。
首先描述什么是序列化:
Java 中对象的序列化 允许您制作一个字节序列 从已实现的任何对象 可序列化接口;它也是 允许您打开该字节序列 回到一个对象。
接下来它描述了外部化可能比序列化更可取的情况:
有时你可能有 的特殊要求 对象的序列化。为了 例如,您可能有一些 的安全敏感部分 对象,例如密码,您所做的 不想保留和转移 某处。或者,它可能毫无价值 保存引用的特定对象 从主要对象,因为它的价值 恢复后会变得一文不值。
你可以控制进程 通过实现序列化 可外部化的接口而不是 可序列化。该接口扩展 原始的 Serializable 接口 并添加 writeExternal() 和 读取外部()。这两种方法将 自动被叫到你的 对象的序列化和 反序列化,允许您 控制整个过程。
我建议阅读整篇文章,因为上面的摘录并未涵盖细节。这篇文章还包含几个你可能会觉得有用的代码 sn-ps。
【讨论】: