1、readObject方法实际上相当于另一个公有的构造器,如同其他的构造器一样,它也要满足所有注意事项。构造器必须检查其参数的有效性,并且在必要的时候对参数进行保护性拷贝。
2、当一个对象被反序列化的时候,对于客户端不应该拥有的对象引用,如果哪个域包含了这样的对象引用,就必须要做保护性拷贝。
3、和构造器一样,readObject方法不可以调用可被覆盖的方法,否则会导致程序失败。
第89条 对于实例控制,枚举类型优先于readResolve
1、如果依赖readResolve进行实例控制,带有对象引用类型的所有实例域则都必须声明为transient。
2、readResolve的可访问性很重要。
第90条 考虑用序列化代理代替序列化实例
1、为可序列化的类设计一个私有的静态嵌套类,精确地表示外围类的实例的逻辑状态。这个嵌套类被称作序列化代理。它应该有一个单独的构造器,其参数类型就是外围类。这个构造器只从它的参数中复制数据:它不需要进行任何一致性检查或者保护性拷贝。
2、它极大地消除了序列化机制中语言本身之外的特征。
3、序列化代理有两个局限性,一是不能与被客户端扩展的类兼容,也不能和对象图中包含循环的类兼容。
4、序列化模式的功能性和安全性开销比较高。