执行java程序时出错:java.io.invalidClassException

时间:2014-03-04 12:29:46

标签: java java-io

我在执行Java程序时遇到错误。请帮帮我怎么办? 错误如下所示:

java.io.InvalidClassException: buddyconnect.UserInfo; 
local class incompatible: stream classdesc serialVersionUID = -411616971160539345, 
local class serialVersionUID = -6346841117345473801
BUILD SUCCESSFUL (total time: 0 seconds)

4 个答案:

答案 0 :(得分:1)

发生此错误是因为您有一个(buddyconnect.UserInfo此处)实施Serializable,但忘记包含serialVersionUID

如果您未在类中声明并初始化该(private static final long)字段,则每次重新执行程序时,JRE都会生成一个新的(几乎)随机字段。

因此,一次执行程序序列化的此类实例将无法通过另一次执行程序进行反序列化。

在课程顶部声明一个,例如:

public class UserInfo
{
    private static final long serialVersionUID = 0x1b32faab5902bfa3L;
    // etc

答案 1 :(得分:0)

您似乎正在尝试反序列化使用旧版本类序列化的不兼容类。

该类的开发人员可能已经更改了一些类语义,因此也更新了serialVersionUID。因此,反序列化过程正在失败。

答案 2 :(得分:0)

您的班级序列化可能存在问题。你的版本不同。尝试清除项目的缓存。使用mvn clean或rebuild项目。当您更改类并拥有新的versionID并尝试读取旧版本的已保存对象时,将抛出此异常。

答案 3 :(得分:0)

从有限的信息看,您可能在为buddyinfo中的UserInfo类所做的对象的序列化/反序列化时遇到问题。你有源头看吗?其中一些问题来自于不创建序列化ID或不维护事物,因此您可以处理在不同时间创建的对象的多个版本。您可以查看另一个StackOverflow question here

中的说明