每当我尝试在我的项目中运行它时,我都会在运行时遇到异常。
EXCEPTION MESSAGE:消息:java.io.InvalidClassException:com.mypackage.abc.MyClass;本地类不兼容:stream classdesc serialVersionUID = -297991290629036654,本地类serialVersionUID = -6182496564283649260
有人可以帮助我摆脱这种异常。这背后的原因是什么?如何解决这个问题?
答案 0 :(得分:3)
InvalidClassException
的API文档说:
当Serialization运行时检测到类的以下问题之一时抛出。
- 该类的串行版本与从流
读取的类描述符的版本不匹配- 该类包含未知数据类型
- 该类没有可访问的no-arg构造函数
查看错误消息,这三个中的第一个就是您的情况。
看起来您正在尝试加载序列化对象,但在此期间您已对类com.mypackage.abc.MyClass
进行了更改,以便您现在尝试加载的序列化对象与新版本的版本不兼容上课。
Java标准序列化机制的一个问题是它将序列化对象与源代码紧密联系在一起:如果更改源代码(特别是您的com.mypackage.abc.MyClass
类),则无法再读取旧的序列化对象
解决此问题的一种方法是恢复到com.mypackage.abc.MyClass
的旧版本,然后编写一个小工具来加载序列化对象,并将它们保存在标准,可扩展的井中的不同文件中-documented格式(例如XML),而不是使用Java序列化。
答案 1 :(得分:0)
您正在尝试读取相应类定义已更改的序列化对象。
答案 2 :(得分:0)
来自java docs:
序列化运行时检测到以下之一时抛出 一个班级的问题。
The serial version of the class does not match that of the class descriptor read from the stream The class contains unknown datatypes The class does not have an accessible no-arg constructor