【问题标题】:Android: what happens if I add serialVersionUID to old serializable objects?Android:如果我将 serialVersionUID 添加到旧的可序列化对象会发生什么?
【发布时间】:2015-11-11 05:21:57
【问题描述】:

如果您采用一个从未明确指定 serialVersionUID 的旧可序列化对象,并将 serialVersionUID 添加到该对象,会发生什么情况?在我看来,下次应用程序由最终用户更新时,它会尝试反序列化磁盘中的数据,发现 serialVersionUID 不匹配,用来自服务器/db/whatever 的新数据覆盖数据,然后你'很好。我在这个假设中正确吗?在这样做时我还应该注意其他问题吗?

private class X implements serializable {...

private static final long serialVersionUID = 0L;

【问题讨论】:

    标签: java android serializable


    【解决方案1】:
    1. 如果您为其赋予与现在在类上运行 serialver 工具所显示的值相同的值,则不会发生任何事情。
    2. 如果您给它一个不同的值,包括该类在内的现有串行流的进一步反序列化将失败并显示InvalidClassException

    在我看来,下次应用程序由最终用户更新时,它会尝试反序列化磁盘中的数据

    正确。

    发现 serialVersionUID 不匹配

    只有当它真的不匹配时。如果您遵循上述建议,它将匹配。

    用来自服务器/db/whatever 的新数据覆盖数据

    不正确。见上文。

    然后你就没事了。

    没有。

    我的假设是否正确?

    没有。

    【讨论】:

    • 感谢您的帮助。我只想添加(对于将来查看此答案的任何人)Android Studio 能够生成所需的 seiralversionuid,因此无需使用 serialver。见这里:labs64.com/blog/2012/12/…
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多