EFFECTIVE JAVA 第十一章 系列化(将一个对象编码成一个字节流)
74.谨慎地实现Serializable接口
*实现Serializable接口付出的代价就是大大降低了“改变这个类的实现”的灵活性。
*增加了出现Bug和安全漏洞的可能性。反系列化是一个“隐藏的构造器”,很难确保“由真正的构造器建立起来的关系”
*增加了测试的负担
*transient关键字修饰的变量不会被初始化
*可以实现Externalizable接口来实现基于默认构造器的显示配置系列化
75.考虑使用自定义的系列化形式
*只有当默认的系列化形式能够合理地描述对象的逻辑状态时,才能使用默认的系列化形式;否则就要设计一个自定义的系列化形式
76.保护性的编写readObject方法(实现构造器的约束条件检测)
77.对于实例控制,枚举类型优先于readResolve
78.考虑用系列化代理代替系列化实例