2012-11-09 33 views
4

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

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

,我试图导入到客户端,从服务器中导出的对象,但我收到此错误:

java.io.InvalidClassException: [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;; Incompatible class (SUID): [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;: static final long serialVersionUID =-359311387972759020L; but expected [Lweka.classifiers.functions.MultilayerPerceptron$NeuralEnd;: static final long serialVersionUID =1920571045915494592L;

我做对类MultilayerPerceptron$NeuralEnd宣布一个明确的序列版本UID,像这个:

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

其中NeuralConnection实现了java.io.Serializable接口。如果我做serialver on MultilayerPerceptron$NeuralEnd我收到我声明的serialVersionUID。那么,为什么两个JVM都改变了这个值?你可以帮我吗?

感谢, 阿尔贝托

+0

请包括您的外部类的定义。 – Perception

+0

对不起,我不明白:MultilayerPerceptron类? – Alberto

+0

是的,因为你的内部类不是静态的,它包含一个隐含的引用,它的外部类必须是可序列化的。我很好奇,看看你的外部类(多层感知器)的定义 – Perception

回答

0

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

+0

不仅有解决方案,它实际上在错误消息中给出。 JVM版本之间的序列化已运行超过15年。 – EJP

0

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

+0

嗨,它不会改变任何东西:现在的定义是 受保护的类NeuralEnd扩展NeuralConnection {static final long serialVersionUID = 1920571045915494592L;但我总是收到相同的错误 – Alberto

+0

@Alberto然后你还没有正确部署修改后的类。 – EJP