【问题标题】:serialVersionUID ExceptionserialVersionUID 异常
【发布时间】:2014-07-04 21:31:39
【问题描述】:

我目前正在编写一个项目,其中有一个可序列化的类 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

如何将“stream classdesc serialVersionUID”改为1L,这样才不会冲突?

谢谢!

【问题讨论】:

    标签: java serializable serialversionuid


    【解决方案1】:

    不要尝试更改 数据 - 相反,如果您确定您的课程仍然与旧版本兼容(并且如果只有一个版本具有数据),将您声明的 serialVersionUID 更改为 -477189107700903771L 以匹配数据中的值。该值是任意的 - 它只需要匹配数据中的内容即可。

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

    出于这些脆弱性的原因,我个人尝试避免像这样的本机二进制序列化。您可能希望查看替代方案,例如 Protocol Buffers

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 2011-11-03
        • 2014-11-11
        • 2017-03-17
        • 2017-06-01
        • 2015-12-29
        • 2012-03-10
        • 2017-10-05
        • 1970-01-01
        相关资源
        最近更新 更多