为什么java中的serialVersionUID必须是静态的、最终的、长类型的? 为什么必须声明为静态、final和long变量类型 这个SerialVersionId是唯一的吗 当两个或多个类包含相同的serialVersionUID时会发生什么?在这种情况下,这个versionUID如何对字节数组进行反序列化有用
它是静态的,因为它属于类,而不是实例 它是最终版本,因为它不会更改(对于该版本的类)。只有当有人对类进行影响序列化方式的更改时,它才会更改 这是一个漫长的过程,因为数据类型易于序列化,适合于紧凑的空间,并且具有比任何人都可能需要的更多的值 它不必是独一无二的。如果一个类的两个版本具有相同的serialversionUID,这意味着对该类没有影响其序列化方式的更改,则该类的这两个版本可以接受相同的序列化格式 不管两个类是否具有相同的serialVersionUID,它不会在类之间使用,它只用于检查类的序列化版本是否与该类的版本兼容为什么java中的serialVersionUID必须是静态的、最终的、长类型的? 为什么必须声明为静态、final和long变量类型 这个SerialVersionId是唯一的吗 当两个或多个类包含相同的serialVersionUID时会发生什么?在这种情况下,这个versionUID如何对字节数组进行反序列化有用,java,serialization,static,final,serialversionuid,Java,Serialization,Static,Final,Serialversionuid,它是静态的,因为它属于类,而不是实例 它是最终版本,因为它不会更改(对于该版本的类)。只有当有人对类进行影响序列化方式的更改时,它才会更改 这是一个漫长的过程,因为数据类型易于序列化,适合于紧凑的空间,并且具有比任何人都可能需要的更多的值 它不必是独一无二的。如果一个类的两个版本具有相同的serialversionUID,这意味着对该类没有影响其序列化方式的更改,则该类的这两个版本可以接受相同的序列化格式 不管两个类是否具有相同的serialVersionUID,它不会在类之间使用,它只用于检查
serialVersionUID=1L代码>没有任何问题
当两个或多个类包含相同的serialVersionUID时会发生什么?在这种情况下,serialVersionUID如何对字节数组进行反序列化
两个或多个类可以声明相同的serialVersionUID。实际的wire格式包含完全限定的类名,因此不存在歧义
如果正在加载的数据中的SerialVersionId与您的类的SerialVersionId不匹配,将抛出一个InvalidClassException
。一个问题中有三个问题。请专注于一个。如果是第一个,你在寻找什么样的答案?它必须是静态final,并且类型为long。为什么long更容易序列化?为什么不应该是int或short之类的?你能帮我了解一下吗?@user1391703:这正进入“因为规范这么说”的领域。还可以看到Eric Lippert对数字的出色反应?只是在谷歌上搜索到了同样的情况,但没有任何想法。。请给我解释一下。@Rabbit“可能是因为他们认为数字会在双字边界上对齐”,尽管这在序列化中不是真的,这一切都无关紧要。