IAd*_*ter 204 java serialization code-generation serialversionuid
当类在Eclipse中实现Serializable时,我有两个选项:添加默认值serialVersionUID(1L)或生成serialVersionUID(3567653491060394677L).我认为第一个更酷,但很多时候我看到人们使用第二个选项.有没有理由生成long serialVersionUID?
Mic*_*ers 86
据我所知,这只是为了兼容以前的版本.这只有在您之前忽略使用serialVersionUID,然后进行了一项您知道应该兼容但会导致序列化中断的更改时才有用.
有关更多详细信息,请参阅Java Serialization Spec.
coo*_*ird 69
序列化版本UID的目的是跟踪类的不同版本,以便执行对象的有效序列化.
我们的想法是生成一个特定版本的类所特有的ID,然后在添加到类中的新细节(例如新字段)时更改该ID,这会影响序列化对象的结构.
始终使用相同的ID,例如1L将来,如果类更改导致更改序列化对象的结构,则在尝试反序列化对象时很可能会出现问题.
如果省略ID,Java将根据对象的字段为您实际计算ID,但我认为这是一个昂贵的过程,因此手动提供一个将提高性能.
以下是一些文章的链接,这些文章讨论了类的序列化和版本控制:
Pan*_*mar 11
每次定义实现的类时,绝对应该创建一个serialVersionUID java.io.Serializable.如果不这样做,将自动为您创建一个,但这很糟糕.自动生成的serialVersionUID基于您的类的方法签名,因此如果您将来更改类以添加方法(例如),则反序列化该类的"旧"版本将失败.这是可能发生的事情:
如果你没有指定serialVersionUID,那么Java会动态生成一个.生成的serialVersionUID就是那个号码.如果您在类中更改某些内容并不会使您的类与以前的序列化版本不兼容但更改了哈希值,那么您需要使用生成的非常大数字的serialVersionUID(或错误消息中的"预期"数字) .否则,如果你自己跟踪所有事情,0,1,2 ......就更好了.
| 归档时间: |
|
| 查看次数: |
77226 次 |
| 最近记录: |