java 中默认和生成的串行版本 uid 之间有什么区别?

what is the different between default and generated serial version uid in java?

我不知道在哪里使用 默认 serialVersionUID 或在 java 中生成的 serialVersionUID ?

private static final long serialVersionUID = 4125965356358329466L; // generated
private static final long serialVersionUID = 1L; // default

串行版本 ID 用于序列化和反序列化对象。 Java 标识要反序列化的字节是否与本地 class 版本匹配,否则将抛出异常。 这在执行 RMI 或持久化对象结构时很重要。 序列化运行时为每个可序列化 class 关联一个版本号,称为 serialVersionUID, 它在反序列化期间用于验证序列化对象的发送方和接收方是否已为该对象加载与序列化兼容的 classes。

没有实际区别。只要你在改变class的时候改变(增加)数字就可以了。

如果您没有自己为 Serializable class 提供 serialVersionUID,那么 Java 会根据 class 的详细信息为您生成一个].一些 IDE 和其他工具可以执行相同的计算,使您能够明确地将生成的 serialVersionUID 放入您的 class。如果您想对 class 进行更改,同时保持与旧版本的序列化兼容性,那么这样做很有用——在大多数情况下这是一个有点棘手的尝试,但通常是可行的。

另一方面,如果您手动管理 serialVersionUID,那么使用普通序列号会容易得多,从 1(或您选择的其他数字)开始并递增每当 class 以破坏序列化兼容性的方式更改时。但是,如果您要为此烦恼,那么 do 确保正确地进行操作——也就是说,在适当的时候更改 serialVersionUID——否则你会打败整个目的。