Я создаю небольшое приложение с использованием JavaFX, и у меня есть такая организация классов.
public class Context implements Serializable {
private static final long serialVersionUID = 12355322553L;
private A objA;
private List<A> aList;
...
}
public class A implements Serializable {
private static final long serialVersionUID = 467788765432L;
private B objB,
private List<B> bList;
...
}
для целей резервного копирования я использую сериализацию.
Мой вопрос: как обрабатывать десериализацию, когда вы изменили классы, например, добавив новое поле.
При добавлении нового поля следующим образом:
public class Context implements Serializable{
private static final long serialVersionUID = 12355322553L;
private A objA;
private List<A> aList;
private String name;
...
}
public class A implements Serializable{
private static final long serialVersionUID = 467788765432L;
private B objB,
private List<B> bList;
...
}
при попытке десериализации моих старых данных с моей новой моделью I получена следующая ошибка
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3016)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2343)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2267)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2125)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1624)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2343)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2267)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2125)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1624)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)