首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >serialVersionUID异常

serialVersionUID异常
EN

Stack Overflow用户
提问于 2014-05-16 12:24:34
回答 2查看 1.3K关注 0票数 0

我目前正在编写一个项目,其中我有一个可序列化的类ClientRepository。该类不指定任何serialVersionUID。当我试图运行我的程序时,我得到了以下例外:

代码语言:javascript
复制
Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = -3576242897222506440

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

代码语言:javascript
复制
Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = 1

如何将"stream“更改为1L,从而避免冲突?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-16 12:40:12

不要试图更改数据--相反,如果您确信您的类仍然与旧版本兼容(如果只有一个版本在野外有数据),则将声明的serialVersionUID更改为-477189107700903771L,以匹配数据中的值。这个值是任意的-它只需要匹配数据中的内容。

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

就我个人而言,我试图避免像这样的本地二进制序列化,正是因为这些脆性的原因。您可能希望考虑一些替代方案,如协议缓冲器

票数 3
EN

Stack Overflow用户

发布于 2014-05-16 12:40:16

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23695116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档