我在哪里可以设置流 classdesc serialVersionUID?

Lia*_*ang 5 java serialization

我正在使用一个从 jar 实现 Serializable 的类,为了确保不会出现与编译器相关的问题,我给了它一个 serialVersionUID private static final long serialVersionUID = 123L;

然后我重新创建了 jar,但是现在当我在新 jar 中使用该类时,它给了我异常:

java.io.InvalidClassException: com.placeiq.piqhash.PIQDeviceId; 本地类不兼容:流 classdesc serialVersionUID = 1568630193381428614,本地类 serialVersionUID = 123

所以我的问题是: 1、什么是流 classdesc serialVersionUID?2、怎么设置才能让两个serialVersionUID一致?

谢谢!

Lee*_*dor 5

该类的序列化版本来自某个地方(在流中),并且它的序列版本 ID 为 1568...但它无法反序列化为您的类版本(本地类),即 123。

您需要弄清楚另一个版本来自哪里。然后,您需要使用新的 jar,以及该类的新版本(如果可以的话)。

一些可能的来源:

  • 来自其他计算机的网络消息带有该类的序列化实例进入您的程序。(这可以是原始套接字消息或 RMI 或使用 Java 序列化的任何内容。它不会是映射到该对象的 JSON 消息或 XML 消息。)

  • 另一个程序或旧版本的程序将该类的实例写入磁盘上的文件(或文件系统中的其他文件),而您的程序无法检索它。

  • 您的程序有两个版本的 jar——旧的和新的——存在,通常是因为不同的类加载器。(如果您不小心管理某种 Java EE 容器(包括 Tomcat 或 Jetty)上可用的所有类路径,则可能会发生这种情况。)

这不是一份详尽的清单。