【问题标题】: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】:
- 如果您为其赋予与现在在类上运行
serialver 工具所显示的值相同的值,则不会发生任何事情。
- 如果您给它一个不同的值,包括该类在内的现有串行流的进一步反序列化将失败并显示
InvalidClassException。
在我看来,下次应用程序由最终用户更新时,它会尝试反序列化磁盘中的数据
正确。
发现 serialVersionUID 不匹配
只有当它真的不匹配时。如果您遵循上述建议,它将匹配。
用来自服务器/db/whatever 的新数据覆盖数据
不正确。见上文。
然后你就没事了。
没有。
我的假设是否正确?
没有。