0

为什么无法反序列化但是我已经序列化了这个 Container 类使用serialVersionUID = 75264711556228L;

public class Container implements Serializable {
    private static final long serialVersionUID = 75264711556228L;
    public boolean isFromLocalCollect=false;
    public boolean isFromLocalCollect=false;
    public void setFromLocalCollect(boolean isFromLocalCollect) {
        this.isFromLocalCollect=isFromLocalCollect;
    }
    public boolean getFromLocalCollect() {
        return this.isFromLocalCollect;
    }
}

现在,在使用名称 container.ser 进行序列化后,我在 Container 类中添加了一个 setter 和 getter 方法,例如:

public class Container implements Serializable {
    private static final long serialVersionUID = 75264711556228L;
    public boolean isFromLocalCollect=false;
    public boolean isFromLocalCollect=false;
    public void setFromLocalCollect(boolean isFromLocalCollect) {
        this.isFromLocalCollect=isFromLocalCollect;
    }
    public boolean getFromLocalCollect() {
        return this.isFromLocalCollect;
    }
    public boolean isFromLocalCollect2=false;
    public void setFromLocalCollect2(boolean isFromLocalCollect2) {
        this.isFromLocalCollect2=isFromLocalCollect2;
    }
    public boolean getFromLocalCollect2() {
        return this.isFromLocalCollect2;
    }
}

然后我尝试使用更改的项目名称来反序列化对象,但未能反序列化并且我得到如下错误:

java.io.InvalidClassException: cvb.db.PbDb; local class incompatible: stream classdesc serialVersionUID = -444070985558173412, local class serialVersionUID = 4350771162641935418
4

2 回答 2

3

当您序列化对象时,您使用了与反序列化对象Container.class不同的版本Container.class

您需要始终使用相同的 .class以确保序列化反序列化操作能够正常工作。

于 2016-01-16T11:58:49.740 回答
0

实际上我所做的只是在 cvb.db.PbDb 类中使用了这个静态的最终 serialVersionUID 变量,例如:

私有静态最终长序列版本UID = 75264711556227L;

并且在 Container 类中已经明确声明了 serialVersionUID。之后,我使用不同的应用程序上下文路径进行序列化和反序列化,因此异常已经消失,现在它对我来说工作正常。

于 2016-01-21T10:58:51.290 回答