Java 中默认和生成的串行版本 uid 有什么区别



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

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

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

如果您自己没有为Serializable类提供serialVersionUID,则 Java 会根据该类的详细信息为您生成一个。 某些 IDE 和其他工具可以执行相同的计算,以便将生成的serialVersionUID显式放入类中。 如果要在保持与旧版本的序列化兼容性的同时对类进行更改,则执行此操作很有用 - 在大多数情况下有点棘手,但通常是可行的。

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

没有实际区别。只要你在换类时改变(递增)数字,你就没事了。

最新更新