【问题标题】:serialization and externalization in java [duplicate]java中的序列化和外部化[重复]
【发布时间】:2010-11-04 18:15:24
【问题描述】:

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

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

【问题讨论】:

  • -1 重复(见 Macarse 的回答)

标签: java serialization


【解决方案1】:

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

API 规范中提供了更多关于Externalizable 接口和Serializable 接口的信息。来自Externalizable接口文档:

只有类的标识 Externalizable 实例写在 序列化流,它是 类的责任保存 并恢复其内容 实例。 writeExternal 和 读取外部方法 可外部化的接口是 由一个类实现以给出 类完全控制格式 和流的内容 对象及其超类型。

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

【讨论】:

    【解决方案2】:

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

    首先描述什么是序列化:

    Java 中对象的序列化 允许您制作一个字节序列 从已实现的任何对象 可序列化接口;它也是 允许您打开该字节序列 回到一个对象。

    接下来它描述了外部化可能比序列化更可取的情况:

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

    你可以控制进程 通过实现序列化 可外部化的接口而不是 可序列化。该接口扩展 原始的 Serializable 接口 并添加 writeExternal() 和 读取外部()。这两种方法将 自动被叫到你的 对象的序列化和 反序列化,允许您 控制整个过程。

    我建议阅读整篇文章,因为上面的摘录并未涵盖细节。这篇文章还包含几个你可能会觉得有用的代码 sn-ps。

    【讨论】:

    • 修复链接,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 2016-01-08
    • 2016-08-20
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多