Java可序列化:serialVersionUID的重要性?
可能重复:
为什么我应该打扰serialVersionUID?
我正在使用一个实现了Serializable的类。 Eclipse给了我一个“无串行UID”的警告,但是写和读这个类的效果很好。 我想知道具有UID的Serializable类的目的是什么? 这只是一种好的做法,否则我的班最终会不工作? 它可以是任何数字?
使用不同的VM或不同的机器序列化和反序列化同一个类时非常重要。 UID用于检查你想要反序列化的类是否真的是你认为它的类,所以如果你的代码中的类有一个UID,并且序列化的类有不同的类,那么de序列化将失败。
没有UID的类将由JVM自动提供,但不能保证不同的JVM将同一个UID赋予同一个类。
阅读Serializable接口的javadoc以获取更多细节。
它可以是任何数字?
理想情况下,它应该是您的类的特定版本(如哈希)的唯一号码,如果您对影响序列化字段(非transient
)的类进行了更改,则UID需要更改。 我认为Eclipse可以为您自动生成一个UID。