4

我在 Java 中使用序列化时遇到问题。我在网上搜索了解决方案,但还没有找到答案。

问题是这样的——我有一个 Java 库(我有代码,并在执行代码之前将其导出到存档),我需要与两个不同的 JVM 一起使用。一个 JVM 在服务器上(Ubuntu,运行 Java(TM) JRE SE 运行时环境(内部版本 1.7.0_09-b05)),另一个在 Android 2.3.3 上。我在 Java 1.6 中编译了这个库。

现在,我正在尝试将一个从服务器导出的对象导入到客户端,但我收到此错误:

java.io.InvalidClassException: [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;; 不兼容的类(SUID):[Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;: static final long serialVersionUID =-359311387972759020L; 但预期 [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;: static final long serialVersionUID =1920571045915494592L;

我确实在 class 上声明了一个明确的串行版本 UID MultilayerPerceptron$NeuralEnd,如下所示:

protected class NeuralEnd extends NeuralConnection {
    private static final long serialVersionUID = 7305185603191183338L;
}

其中 NeuralConnection 实现了 java.io.Serializable 接口。如果我在上面做一个serialverMultilayerPerceptron$NeuralEnd我会收到我声明的 serialVersionUID。那么,为什么两个 JVM 都改变了这个值呢?你能帮助我吗?

谢谢,阿尔贝托

4

2 回答 2

0

我认为没有解决方案。序列化在不同的 JVM 版本之间不起作用(Dalvik 甚至不是 JVM...)。寻找其他解决方案,如 JSON/XML 对象序列化。

于 2012-11-09T18:51:17.823 回答
0

您的 serialVersionUID 值是错误的。将其设置为错误消息中的“预期”值。

于 2012-11-09T22:56:47.697 回答