serialVersionUID异常

时间:2014-05-16 12:24:34

标签: java serializable serialversionuid

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

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,所以它不会发生冲突?

谢谢!

2 个答案:

答案 0 :(得分:3)

请勿尝试更改数据 - 相反,如果您某些您的类仍然与旧版本兼容(并且只有一个版本具有数据输出,将您声明的serialVersionUID更改为-477189107700903771L以匹配数据中的值。该值是任意的 - 它只需要匹配数据中的内容。

当然,如果您的类以不兼容的方式更改,则需要编写一些自定义序列化代码。

我个人试图避免这样的本地二进制序列化,正是出于这些脆弱性的原因。您可能希望查看Protocol Buffers等替代方案。

答案 1 :(得分:1)

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