1. serialersionUID版本控制。
两种用途
1).强制更新(每自动生成)不一致时报错强制版本更新。
2).保持兼容性。服务端类版本更新后,如果serialVersionUID不变,则反序列化可通过,未识别的field填充默认值。
2. 静态变量不序列化。
序列化只针对对象的数据而不是类级别的内容。
3. 不序列化未实现Serializable接口的父类
虚拟机将不序列化父类,但是父类必须提供(默认的)构造器,因为JVM创建对象时必须先初始化其父类。
4. 不序列化Transient关键字,反序列化时赋初始值。
分析以上两条可以实现如下场景
这样父类中的三个属性都不会被序列化,好处是当有多个Child类时,不需要重复写transient,代码简洁。
5. 对敏感字段加密
可以使用ObjectOutputStream的PutField方便编程。案例: RMI 技术是完全基于 Java 序列化技术的
6. 序列化存储规则
同一个对象多次序列化,只存储一次。其他仅存储引用;反序列化时回复一个对象和其他的引用关系。
改变某个属性值后再写入仍然不能写两次,而是一样保存第一个的引用。当要多次序列化一个对象时需要注意这个问题。