Android:如果我将 serialVersionUID 添加到旧的可序列化对象会怎样?

Android: what happens if I add serialVersionUID to old serializable objects?

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

private class X implements serializable {...

private static final long serialVersionUID = 0L;
  1. 如果您在 class 上使用 运行 工具 serialver 显示的值与现在相同,则不会发生任何事情。
  2. 如果你给它一个不同的值,包括 class 在内的现有串行流的进一步反序列化将失败并显示 InvalidClassException.

It seems to me that the next time the app was updated by endusers it would try to deserialize data from disc

正确。

find out that the serialVersionUID didn't match

只有当它真的不匹配时。如果您按照上述建议进行操作,它将匹配。

overwrite the data with new data from the server/db/whatever

不正确。见上文。

and after that you're fine.

没有

Am I correct in this assumption?

没有