序列化版本号作用
- JVM在序列化过程识别不同类依据。当序列化版本号不同JVM认为这是两个不同的类)
即使类的名字相同
- JVM在识别不同类时先比较类名字(name),如果相同则比较序列号版本号;
类的名字就好像人身份证上的名字。重名的人有很多个,但要辨别是不是同一个人,查看身份证号即可
- class类中实现Serializable接口时JVM会随机给一个序列号版本号
也可主动进行赋值private static final long serialVersionUID=1L;(一般主动给与序列化版本号给一个1L即可) - 在已经序列化的文件, 但他类已经修改时,如果序列化版本号不一致会异常InvalidClassException
修改类的一些情况
- 序列号版本相同的情况下
- 新修改的类增加了原来类没有的变量,在原来类已经序列化,在反序列化新增加的变量为默认值
- 新修改的类删除了原来类的变量,在反序列化以前的类时,该变量也会跟着消失
transient关键字
- transient在类中修饰的变量的数据,不参与序列化的过程,反序列化后该变量为java默认值,比如 String s=“11”; 字符串,在序列化和反序列化后 ,得到的是String s=null;