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的固定,但是 ,这需要我们要非常小心的注意类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通