我目前正在编写一个项目,其中我有一个可序列化的类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如何将"stream“更改为1L,从而避免冲突?
谢谢!
发布于 2014-05-16 12:40:12
不要试图更改数据--相反,如果您确信您的类仍然与旧版本兼容(如果只有一个版本在野外有数据),则将声明的serialVersionUID更改为-477189107700903771L,以匹配数据中的值。这个值是任意的-它只需要匹配数据中的内容。
当然,如果您的类以不兼容的方式进行更改,则需要编写一些自定义序列化代码。
就我个人而言,我试图避免像这样的本地二进制序列化,正是因为这些脆性的原因。您可能希望考虑一些替代方案,如协议缓冲器。
发布于 2014-05-16 12:40:16
问题可能是在添加serialVersionUID = 1L之前序列化到存储库中的对象--它们仍然生成了与1L不同的serialVersionUID。您应该清除存储库。
https://stackoverflow.com/questions/23695116
复制相似问题