可能重复:
What is the difference between Serializable and Externalizable in Java?
java中的序列化和外化有什么区别?
答案 0 :(得分:4)
基本上,Serializable
和Externalizable
之间的区别在于,对于实现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()。这两种方法都会 自动调用你的 对象的序列化和 反序列化,允许你 控制整个过程。
我建议阅读整篇文章,因为上面的摘录并未涵盖细节。本文还包含一些您可能会觉得有用的代码片段。