不同JVM的java序列化问题

不同JVM的java序列化问题,java,android,serialization,Java,Android,Serialization,我在Java中使用序列化时遇到问题。我在网上搜索了一个解决方案,但还没有找到答案 问题是,我有一个Java库(我有代码,在执行代码之前将其导出到存档),需要与两个不同的JVM一起使用。一个JVM在服务器上(Ubuntu,运行Java(TM)JRE SE运行时环境(build 1.7.0_09-b05)),另一个在Android 2.3.3上。我用Java1.6编译了这个库 现在,我正在尝试将从服务器导出的对象导入到客户端,但收到以下错误: java.io.InvalidClassExceptio

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

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

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

java.io.InvalidClassException: [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;; 不兼容类(SUID): [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;:静态 最终长SerialVersionId=-359311387972759020L;但应为 [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;:静态 最终长序列版本ID=1920571045915494592L

我确实在类
多层Perceptron$NeuralEnd
上声明了一个显式的串行版本UID,如下所示:

protected class NeuralEnd extends NeuralConnection {
    private static final long serialVersionUID = 7305185603191183338L;
}
其中,NeuralConnection实现java.io.Serializable接口。如果我在
MultilayerPerceptron$NeuralEnd
上执行serialver,我将收到我声明的serialVersionUID。那么,为什么两个JVM都更改了此值?您能帮助我吗

谢谢,
Alberto

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

您的SerialVersionId值错误。请在错误消息中将其设置为“预期”值。

请同时包含外部类的定义。抱歉,我不明白:MultilayerPerceptron类?是的,因为您的内部类不是静态的,它包含一个隐式r引用其必须可序列化的外部类。我很好奇您对外部类(MultilayerPerceptron)的定义。该类是这样的:公共类MultilayerPerceptron扩展分类器实现OptionHandler、WeightedInstanceHandler、Randomizable{/**for serialization*/private static final long serialVersionUID=-5990607817048210779L;我不记得说过分类器实现Serializable:-)不仅存在解决方案,而且实际上在错误消息中给出了解决方案。JVM版本之间的序列化已经工作了15年多。您好,它不会改变任何东西:n定义是受保护的类NeuralEnd扩展了NeuralConnection{static final long serialVersionId=1920571045915494592L;但我总是收到相同的定义error@Alberto那么您还没有正确部署修改过的类。