java - 关于 Java 的 Serializable,需要澄清

标签 java serialization

在Java中实现Serializable接口(interface)时,需要设置serialVersionUID

选择默认长整型还是自动生成长整型有什么区别吗?

什么时候应该优先选择一个?

如果选择了auto generated long,如果改变了是否应该在事件类中改变?换句话说,分配给 serialVersionUID 的值......是否与类的当前结构以及在那里声明的字段和方法有关?

private static final long   serialVersionUID    = 1L;
private static final long   serialVersionUID    = 6749067740891125834L;

最佳答案

默认和自动生成的 long 之间的主要区别是自动生成的串行版本 UID 是基于对象的字段。如果您保留了没有版本 ID 的对象副本,则使用生成的版本可以帮助确保与已保留的对象的兼容性。因此,我倾向于使用生成的版本。在任何一种情况下,如果进行了不兼容的更改,您都需要更新版本 ID。

http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/version.html 5.6.1 和 5.6.2 部分描述了哪些更改是兼容的,哪些更改会破坏序列化。

关于java - 关于 Java 的 Serializable,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322086/

相关文章:

java - Jetty 嵌入式和 JSP 编译到 1.7?

javascript - 从nodejs有效地序列化(和读取)int数组

c# - 了解 System.Xml.Serialization.XmlIgnoreAttribute 与基类

c# - 当使用自定义契约(Contract)解析器而不是 JsonConverter 属性时,自定义 JsonConverter 被忽略以进行反序列化

c# - JavaScriptSerializer 和 ValueTypes(结构)

java - 如何使用 SBT 连续运行我的 java 测试

java - 安卓单元测试 : mocking System. currentTimeMillis()

java - 为什么在 switch 语句中不能使用对象,而可以使用枚举

java - 将序列化 java 对象保存到 Db 时出现问题

java - 如果ArrayList中有重复的对象,如何返回true?