2014-05-16 43 views
0

我目前正在写一个项目,我有一个可序列化的类ClientRepository。该类不指定任何se​​rialVersionUID。 当我尝试运行我的程序,我得到了以下异常:serialVersionUID异常

Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = -3576242897222506440 

所以我增加了一个默认的serialVersionUID(1L),但现在我得到

Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = 1 

我怎样才能改变“流classdesc serialVersionUID“为1L,所以它不会冲突?

谢谢!

回答

3

不要试图改变数据 - 相反,如果你一定您的类仍与旧版本兼容(如果只有一个版本在野外有数据输出),更改声明serialVersionUID到-477189107700903771L以匹配数据中的值。该值是任意的 - 它只需要匹配数据中的内容。

当然,如果你的班级在不兼容的方式发生了变化,你需要编写一些自定义的序列化代码。

就我个人而言,我试图避免这样的原生二进制序列化,正是因为这些脆性原因。你可能希望看看替代品,如Protocol Buffers

1

问题可能是在添加serialVersionUID = 1L之前序列化到存储库中的对象 - 它们仍然生成了与1L不同的serialVersionUID。您应该清除存储库。