Java教程

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

本文主要是介绍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的固定,但是 ,这需要我们要非常小心的注意类。

这篇关于Java反序列化失败 java.io.InvalidClassException: Serialization.Box; local class incompatible的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!