Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化不带serialversionuid的类_Java - Fatal编程技术网

Java 反序列化不带serialversionuid的类

Java 反序列化不带serialversionuid的类,java,Java,我有一个实现可序列化接口的类。我正在尝试反序列化由另一个应用程序序列化和存储的对象。由另一个应用程序存储的对象由类似于下面的类创建- // does not have serialversionuid defined. public Class Pet implements Serializable { private count; private date; // getters & setters } 我在应用程序中定义了一个类似的类。我的

我有一个实现可序列化接口的类。我正在尝试反序列化由另一个应用程序序列化和存储的对象。由另一个应用程序存储的对象由类似于下面的类创建-

// does not have serialversionuid defined.
public Class Pet  implements Serializable {
    private count;       
    private date;

    // getters & setters
}
我在应用程序中定义了一个类似的类。我的也没有定义serialversionuid。当我尝试反序列化这个对象时,我看到了一个类似的错误-

解组java.IO.InvalidClassException时发生IO错误: 本地类不兼容:流classdesc serialVersionUID= -3565652537049376317,本地类serialVersionUID=-4242367052120288379

我无法控制序列化和存储数据的类。有没有办法对我的类进行更改,以便它可以反序列化对象?

根据规范中的第4.6节,如果可序列化类没有指定
serialVersionUID
,JVM会根据类的详细信息自行选择一个。然而,它选择的算法(在上面的链接中描述)对类的细节非常敏感。此外,它也可能取决于编译器实现,因为算法直接作用于反映类定义的字节流

在您的情况下,由于在解marshalling期间出现无效类版本错误,这意味着以下两件事之一:

  • 虽然您认为您的类与其他应用程序使用的类非常接近,但仍然略有不同。再次检查算法。它对类细节高度敏感
  • 由其他应用程序序列化的对象是从其他编译器生成的类定义创建的

  • 为了能够反序列化该对象,必须检查上述两种可能性,并采取措施消除差异

    这不是问题所在。serialVersionUID不匹配,因为类不同。

    我认为类可能不同,您是否有权查看所使用的类是否具有相同的结构?谢谢@EduardoDennis。你说得对。还有两种方法。谢谢@VHS。我看到我的类有两个额外的方法。谢谢@Eduardo Dennist这就是问题所在,
    serialVersionUID
    的区别在于它是如何被检测到的。@EJP他认为问题在于他没有定义串行版本,这就是它们不同的原因。注意第一条评论,他是如何理解我所说的,并在评论中感谢我。