P460-P469
《Head First Java》20201026读书笔记
Version ID:序列化的识别
如果将对象序列化,则必须要有该类才能还原和使用该对象、
会损害解序列化的修改:
- 删除实例变量
- 改变实例变量的类型
- 将非瞬时的实例变量改为瞬时的
- 改变类的继承层次
- 将类从可序列化改成不可序列化
- 将实例变量改成静态的e
通常不会有事的修改:
- 加入新的实例变量(还原时会使用默认值)
- 在继承层次中加入新的类
- 从继承层次中删除类
- 不会影响解序列化程序设定变量值的存取层次修改
- 将实例变量从瞬时改成非瞬时(会使用默认值)
使用serialVersionUID
每当对象被序列化的同时,该对象都会被盖上一个类的版本识别ID。
这个ID被称为serialVersionUID,它是根据类的结构信息计算出来的。
当类可能会在产生序列化对象之后继续演进时···
- 使用serialver工具来取得版本ID
- 把输出拷贝到类上
- 在修改类的时候要确定修改程序的后果!
例如,新的Dog要能够处理旧的Dog解序列化之后新加入变量的默认值。
存储BeatBox节奏
在BeatBox中的鼓声样式只不过是一组复选框而已。
在播放sequqence的同时,程序代码会逐个检查复选框以指出哪个鼓声应该在16拍之中放出。
因此,存储节奏对我们而言就是存储复选框的状态。
可以用简单的boolean数组来存储156个复选框的状态。
只要其中的元素都是可被序列化的,数组对象就可以被序列化。因此,存储数组是没有问题的。
要载回节奏样式时,只要读取单一的boolean数组对象(将它还原)并存回复选框就可以。