74. 谨慎地实现Serializable接口

实现序列化接口带来的问题:

  1. 灵活性:实现序列化接口会导致程序发布后灵活性变差(导出后要永远支持这种序列化形式)。
  2. 安全性和BUG:增加了BUG和安全漏洞的可能性:反序列化机制是一个“隐蔽的构造器”。依靠默认的反序列化机制,很容易使对象的约束关系遭到破坏,以及遭到非法访问
  3. 测试负担:随着类发型新的版本,相关的测试负担也增加了。

最佳实践:为了继承而设计的类,应尽可能少地去实现序列化接口。

75. 考虑使用自定义序列化形式

76. 保护性地编写readObeject方法

针对74条中的安全性问题,可以使用readObject方法来获取对象,保证构造对象时的一些约束被满足

77. 对于实力控制,枚举类型优先于readResolve

78. 考虑用序列化代理代替序列化实例