java中的默认和生成的串行版本uid有什么不同?

时间:2017-02-02 07:41:09

标签: java serialization deserialization serialversionuid

我不确切知道在java中使用默认serialVersionUID或生成serialVersionUID 的确切位置?

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

另一方面,如果您手动管理serialVersionUID,那么使用普通序列号会更加容易,从1开始(或您选择的其他数字)并且每当增加时递增以改变序列化兼容性的方式更改类。但是,如果您打算使用它,那么确保正确地执行 - 也就是说,在适当的时候更改serialVersionUID - 否则您将失去整个目的。

答案 2 :(得分:0)

没有实际差异。只要你在改变课程时改变(递增)数字,你就可以了。