第十二章 序列化
本章关注对象序列化,它是 Java 的框架,用于将对象编码为字节流(序列化),并从对象的编码中重构对象(反序列化)。对象序列化后,可以将其编码从一个 VM 发送到另一个 VM,或者存储在磁盘上,以便今后反序列化。本章主要讨论序列化的风险以及如何将其最小化。
85. 优先选择 Java 序列化的替代方案
当序列化在 1997 年添加到 Java 中时,它被认为有一定的风险。这种方法曾在研究语言(Modula-3)中尝试过,但从未在生产语言中使用过。虽然程序员不费什么力气就能实现分布式对象,这...
86. 非常谨慎地实现 Serializable
使类的实例可序列化非常简单,只需实现 Serializable 接口即可。因为这很容易做到,所以有一个普遍的误解,认为序列化只需要程序员付出很少的努力。而事实上要复杂得多。虽然使类可序列化的...
87. 考虑使用自定义的序列化形式
当你在时间紧迫的情况下编写类时,通常应该将精力集中在设计最佳的 API 上。有时,这意味着发布一个「一次性」实现,你也知道在将来的版本中会替换它。通常这不是一个问题,但是如果类实现 Seri...
88. 保护性的编写 readObject 方法
第 50 条介绍了一个不可变的日期范围类,它包含可变的私有变量 Date。该类通过在其构造器和访问方法(accessor)中保护性的拷贝 Date 对象,极力维护其约束条件和不可变性。该类代...
89. 对于实例控制,枚举类型优于 readResolve
第 3 条讲述了 Singletion(单例)模式,并且给出了以下这个 Singletion 示例。这个类限制了对其构造器的访问,以确保永远只创建一个实例。 public class Elv...
90. 考虑用序列化代理代替序列化实例
正如 85 条和第 86 条提到的,以及本章一直在讨论的,决定实现 Serializable 接口,会增加出错和出现安全问题的可能性,因为它允许利用语言之外的机制来创建实例,而不是使用普通的...