6

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

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

3 回答 3

4

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

于 2017-02-02T07:42:20.350 回答
3

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

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

于 2017-02-02T07:59:59.667 回答
0

没有实际区别。换班的时候只要改(增加)数字就OK了。

于 2017-02-02T07:44:52.030 回答