【问题标题】:error while executing java program : java.io.invalidClassException执行 java 程序时出错:java.io.invalidClassException
【发布时间】:2014-03-04 12:29:45
【问题描述】:

我在执行 Java 程序时遇到错误。请帮我做什么? 错误如下:

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

【问题讨论】:

    标签: java java-io


    【解决方案1】:

    出现此错误是因为您有一个类(此处为buddyconnect.UserInfo)实现Serializable,但忘记包含serialVersionUID。

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

    因此,由您的程序的一次执行序列化的此类实例将不会被您的程序的另一次执行反序列化。

    在班级顶部声明一个,例如:

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

    【讨论】:

    • 我对serialversionUID不太了解,你能告诉我更多关于serialversioUID的信息吗?
    • 它被 JRE 用作“标识符”,在序列化/反序列化实现 Serializable 的类时使用。
    【解决方案2】:

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

    类的开发者可能已经改变了一些类的语义,因此也更新了serialVersionUID。所以反序列化过程失败了。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多