我正在使用 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;
...
}
尝试使用新模型反序列化旧数据时出现以下错误
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)