Serialization 不同的阶级有不同的诉讼

Serialization 不同的阶级有不同的诉讼,serialization,deserialization,java,suid,Serialization,Deserialization,Java,Suid,假设我有完全不同的类和不同的类名。我应该在类中使用不同的serialVersionUID 如果有,为什么有必要 JRE如何准确地进行反序列化?不,您不需要不同的SUID(所有类都可以使用1) 当序列化对象时,类标识符(package.name.ClassName)和SUID都是标头的一部分,用于标识对象所属的类,并确保写入端和读取端之间不存在不兼容 但是,当您在结构上更改一个类(添加/删除一个字段)时,您应该为该类设置一个新的SUID(在调试期间,您可以让JVM在运行时基于.class文件创建一

假设我有完全不同的类和不同的类名。我应该在类中使用不同的
serialVersionUID

如果有,为什么有必要


JRE如何准确地进行反序列化?

不,您不需要不同的SUID(所有类都可以使用1)

当序列化对象时,类标识符(package.name.ClassName)和SUID都是标头的一部分,用于标识对象所属的类,并确保写入端和读取端之间不存在不兼容


但是,当您在结构上更改一个类(添加/删除一个字段)时,您应该为该类设置一个新的SUID(在调试期间,您可以让JVM在运行时基于.class文件创建一个新的SUID)

对于不同包中的类或具有不同名称的类来说,这并不重要。好的,谢谢您的快速回答。您知道JRE是如何完成序列化/反序列化的吗?默认情况下,将suid设置为1L不是更有用吗?我不明白生成的suid的含义。记住接受你最喜欢的答案;本质上,序列化程序写入报头,然后序列化每个字段(它可以通过缓存系统处理循环),并且生成的SUID基于.class的散列,因此当它被更改时,SUID可能与以前不同OK,cool,感谢您的解释。我对生成的SUID的问题是:如果我也可以增加SUID,为什么要生成SUID?这是同一时间曝光,更符合逻辑;-)@t你也可以忘记做增量运算,但是我们不要讨论这个问题here@tmaier这个答案的最后一段是拙劣的建议。你的目标永远不要改变SUID。当对象进行版本控制时,存在高度的二进制兼容性,您应该永远不要干扰这一点。请参阅对象序列化规范的对象版本控制一章。