【发布时间】:2013-11-30 10:42:36
【问题描述】:
public class Employee2 implements java.io.Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我首先序列化了 Employee2 对象。然后在 Employee2 下添加了一个字段,即年龄。现在反序列化Employee2并得到以下错误
java.io.InvalidClassException: Test.Employee2;本地班 不兼容:流 classdesc serialVersionUID = -342194960183674221, 本地类serialVersionUID = -8890407383319808316
这是预期的,因为类的结构已被修改(因此 serialVersionUID 已修改,这是在序列化时内部计算的 和反序列化)
现在,如果我在 Employee2 下声明以下字段并重复该场景,根据我的理解,我不应该得到 InvalidClassException,因为 serialVersionUID 在序列化和反序列化时是相同的,但我仍然收到 InvalidClassException 异常。为什么?如果序列化 进程仍然使用在运行时计算的serialVersionUID,而不是在类下手动定义,那么声明它有什么用?
static final Long serialVersionUID = 1L;
【问题讨论】:
标签: java serialization serialversionuid