我目前正在编写一个项目,我有一个可序列化的类ClientRepository。该类不指定任何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,所以它不会发生冲突?
谢谢!
答案 0 :(得分:3)
请勿尝试更改数据 - 相反,如果您某些您的类仍然与旧版本兼容(并且只有一个版本具有数据输出,将您声明的serialVersionUID
更改为-477189107700903771L以匹配数据中的值。该值是任意的 - 它只需要匹配数据中的内容。
当然,如果您的类以不兼容的方式更改,则需要编写一些自定义序列化代码。
我个人试图避免这样的本地二进制序列化,正是出于这些脆弱性的原因。您可能希望查看Protocol Buffers等替代方案。
答案 1 :(得分:1)
问题可能是在添加serialVersionUID = 1L
之前序列化到存储库中的对象 - 它们仍然生成了与1L
不同的serialVersionUID。您应该清除存储库。