Serializable接口
将一个对象编码成一个字节流 , 称为对象序列化.
Serializable接口 实现的代价 :
- 一旦一个类被发布, 就大大降低了”改变这个类的实现”的灵活性 ; 序列化类的唯一标识符 是 序列版本 UID .
- 它增加了出现bug和安全漏洞的可能性
- 随着类发行新的版本 , 相关的测试负担也增加了
要点 :
- 为了继承而设计的类应该尽可能少地去实现Serializable.
- 对于为继承而设计的不可序列化的类 , 你应该考虑提供一种无参构造器.
- 内部类不应该实现Serializable.
自定义的序列化形式
使用默认的序列化形式是合适的 , 通常还必须提供一个readObject方法以保证约束关系和安全性.
使用默认序列化形式,会有以下缺点 :
- 使这个类的导出API永远地束缚在该类的内部表示法上
- 它会消耗过多的空间
- 它会消耗过多的时间
- 它会引起栈溢出
如果在读取整个对象状态的任何其他方法上强制任何同步, 则也必须在对象序列化上强制这种同步
为每个可序列化的类声明一个显式的序列版本UID