Java反序列化失败 java.io.InvalidClassException: Serialization.Box; local class incompatible

错误

记一次错误,在实现对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的固定,但是 ,这需要我们要非常小心的注意类。

posted @   Lang77  阅读(1042)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示