记一次错误,在实现对Box类的反序列化的过程中出现了错误java.io.InvalidClassException: Serialization.Box; local class incompatible: stream classdesc serialVersionUID = -3710107360465404214, local class serialVersionUID = 1882054695999505670
错误的原因是由于UID是不匹配的,JVM拒绝进行反序列化
产生错误的原因要从序列化和反序列化来看,当我们进行序列化的时候,序列化的对象会被标记一个类的版本号,就是serialVersionUID,而serialVersionUID是基于class的结构而产生的,所以即使是原本的class,如果对其进行了修改(添加了一个类,一个方法...)都会产生serialVersionUID的变化,而进行反序列化的时候,JVM会比较对象和其class的UID是否相同,如果不相同,JVM就会认为是这个类不是之间进行序列化的类,由此产生错误
原因就是当我在进行序列化之后,我对Box类进行了修改,增加了一个变量
我们可以通过命令serialver + 类名
查询类的UID
修改类前
修改类后
UID出现问题
为了实现在序列化之后还能够对class进行修改的操作的要求,一开始就使用serialver
得到class的UID,然后写在类中,就能实现UID的固定,但是 ,这需要我们要非常小心的注意类。