下面是一个显式声明了serialVersionUID的例子:
在序列化和反序列化的代码中都有一个实现了Serializable 的User类;
public class User implements Serializable {
private static final long serialVerisionUID = 1L ;
...
}
//序列化过程
User user = new User();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.writeObject(user);
out.close();
public class User implements Serializable {
private static final long serialVerisionUID = 1L ;
...
}
//反序列化过程
ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser = (User)in.readObject();
in.close();
通过比较传输过来的uid和反序列化处的uid,一致的话反序列化成功;
如果不手动指定给SerialVersionUID的值,系统会计算当前类的hash值并赋予给serialVersionUID,
假如序列化处或者反序列化处的user类被修改了,系统生成的两个serialVersionUID就会不一致,导致反序列化失败。