2016-01-16 1 views
0

Почему не удался десериализация однако я сериализовать этот класс контейнера с помощью serialVersionUID = 75264711556228L;java.io.InvalidClassException при десериализации объекта после некоторой модификации в классе Java

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 как:

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 

ответ

2

Когда вы сериализовать объект, который вы использовали версию Container.class дифферента от Container.class используется для десериализации его.

Необходимо всегда использовать один и тот же .class, чтобы убедиться в том, что операция десериализации сериализации будет работать правильно.

0

На самом деле то, что я сделал, что я просто использовал эту статическую конечную переменную serialVersionUID в классе cvb.db.PbDb как:

частный статический окончательный длинный serialVersionUID = 75264711556227L;

и в контейнере уже были объявлены serialVersionUID явно. После этого я сериализую и десериализую с различным контуром контекста приложения, так что исключение исчезло, и теперь он отлично работает для меня.