为什么生成long serialVersionUID而不是简单的1L?

当类在Eclipse中实现Serializable时,我有两个选择:添加默认serialVersionUID(1L)或生成serialVersionUID(3567653491060394677L) 。 我认为第一个更酷,但很多时候我看到有人使用第二个选项。 是否有任何理由生成long serialVersionUID


据我所知,这只是为了与以前的版本兼容。 如果您之前忽略使用serialVersionUID,那么这只会非常有用,然后进行了一项更改,您知道该更改应该是兼容的,但会导致序列化中断。

有关更多详细信息,请参阅Java序列化规范。


序列化版本UID的目的是跟踪不同版本的类,以便执行对象的有效序列化。

我们的想法是生成一个对某个特定版本的类是唯一的ID,当有新的细节添加到类中时,这个ID将被更改,例如新字段,这会影响序列化对象的结构。

总是使用相同的ID,比如1L意味着将来如果类定义被改变,导致序列化对象的结构发生变化,那么尝试反序列化对象时就会出现问题。

如果省略ID,Java实际上会根据对象的字段为您计算ID,但我认为这是一个昂贵的过程,因此手动提供一个将提高性能。

以下是一些讨论序列化和版本化类的文章的链接:

  • JDC技术提示:2000年2月29日(链接截至2013年2月)
  • 发现Java序列化API的秘密

  • 生成的主要原因是使其与现有版本的已存在持续副本的类兼容。

    链接地址: http://www.djcxy.com/p/23853.html

    上一篇: Why generate long serialVersionUID instead of a simple 1L?

    下一篇: Use the serialVersionUID or suppress warnings?