这是否意味着我们可以为单个类拥有所有数量的版本?我想不会。我发现它的原始值要短得多。
What is a serialVersionUID and why should I use it?没有说明为什么实现这个机制的人选择它作为一个长值。
最佳答案
serialVersionUID
的类型应该是 long
,因为它就是这样指定的。请参阅http://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html (特别是第 4.6 节)
UID 为 64 位的原因是,如果使用 32 位值,则意外 UID 冲突的风险会太高。
默认的串行版本 UID 生成方案基于类方法和字段创建哈希。有一个小但非零的问题,即两个不同的类将具有相同的默认 UID。如果发生这种情况,那么反序列化器可能不会注意到对象的序列化形式与我们尝试反序列化的类不兼容。然后不好的事情就会发生。
如果使用 32 位 UID,两个不兼容的类具有相同 UID 的几率将为二分之一32。这大约是四十亿分之一。这机会太大了。对于 64 位 UID 值,变化是 264 之一。这大约是十六万亿分之一。 (设计者)认为这是一个可以接受的小概率。
关于java - 为什么serialVersionUID 对于可序列化类来说是 long 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42389421/