【问题标题】:How can I find out the serialVersionUID of a serialized Java object?如何找出序列化 Java 对象的 serialVersionUID?
【发布时间】:2015-02-11 23:46:50
【问题描述】:

我有几个可序列化的类在编译时没有指定 serialVersionUID。我现在需要向这些类添加一些数据成员,但希望保留一些已经序列化的对象。

有没有办法找出这些序列化对象的serialVersionUID,以便我可以在源代码中指定相同的ID?

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    如果您尚未修改代码,您可能可以运行 serialver 工具(JDK 的一部分)并查看它生成的内容。我相信这会让你知道计算出的seriVersionUID 是什么。

    Here is a brief article on serialver.

    【讨论】:

    • 确保使用与最初编译代码时完全相同的 JVM 执行此操作!
    • 这也应该适用于不同的 JVM,否则类文件和序列化对象将无法跨 JVM(它们是)移植。
    • Java 对象序列化规范第 4.6 节解释了在内部类的情况下,由于实现为合成成员生成不同的名称,serialVersionUID 可能无法跨 JVM 兼容。我已经在实践中看到过这种情况,即使使用两个 Sun JVM。
    【解决方案2】:

    我通常做的是,我编译代码,尝试运行它,并且引发的异常提到了有问题的 SVUID,所以我可以将它剪切并粘贴到我自己的代码中。粗制滥造,但它有效。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Eclipse,它有一个“快速修复”来生成计算出的 serialVersionUID。 当然,这只有在对象被序列化时拥有类的(确切)源时才有效。

      如果您至少有它们的类文件,请使用“serialver”命令行工具(JDK 附带)。

      【讨论】:

        猜你喜欢
        • 2010-11-22
        • 2017-07-29
        • 1970-01-01
        • 2013-01-21
        • 2010-10-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多