序列化和反序列化
定义
- 序列化-Serialize:java对象存储到文件中,将java对象的状态保存下来的过程->对应使用类ObjectOutputStream
- 反序列化-DeSerialize:将硬盘上的数据恢复到内存当中,恢复成java对象->对应使用类ObjectIutputStream
- 注意这里指的是状态保存,而不是单纯的文件保存,如游戏状态、浏览状态等
注意
- 参与序列序列化的对象,必须实现Serializable接口
- Serializable接口只是一个标志接口,接口中什么代码都没有
- java虚拟机会识别这个接口并进行相关处理,自动生成一个序列化版本号
- 序列化版本号的作用
- java虚拟机首先通过类名区分类
- 如果类名一样,通过版本号区分类
- 缺点:一旦代码确定后,代码不能修改,因为修改代码重新编译会生成新的版本号,这时修改后的类和原来的类就不是一个类了,这样不利于类的升级更新
- 方案是这个类指定一个手动写一个固定版本号,表示本类升级更新始终使用同一个版本号->
private static final long serialVersionUID = ..........;
- transient关键字修饰,表示游离的,不参与序列化
如:private transient String name;
- 序列化实现
- 反序列化实现