我无法在新会话中使用Java中的文件反序列化对象。
我可以将一个arraylist序列化为文件,然后在同一个会话中反序列化,但是,如果我创建一个新的Main对象并尝试反序列化在上一个会话中工作的同一个文件,则该代码不起作用。 / p>
为什么会这样?
这是我的代码:
public void LoadPersonListFromFile(String Filename)
{
try
{
PersonList = new ArrayList<Person>();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
ArrayList<Person> PersonList = (ArrayList<Person>) in.readObject();
in.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void SavePersonFileToFile(String Filename)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(Filename));
out.writeObject(PersonList);
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
修改
DeSerialization似乎正在工作,因为如果我在LoadPersonListFromFile方法中对List执行.size()调用,则得到值2.但是,如果我在List上调用.size()方法在LoadPersonListFromFile方法中,.size()显示为0.为什么会这样?我是否需要将反序列化的ArrayList复制到私有字段?
我有以下私有字段将ArrayList存储在类的顶部:
private ArrayList<Person> PersonList;
EDIT2
搞定了。这是代码:
public void LoadPersonListFromFile(String Filename)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
ArrayList<Person> PersonListFromFile = (ArrayList<Person>) in.readObject();
in.close();
PersonList = PersonListFromFile;
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:1)
您似乎没有在serialVersionUID
类中定义静态最终长Person
。基本上,当您编译在源代码中没有定义Serializable
的{{1}}类时,Java编译器将为您定义具有随机值的类。
要解决此问题,请在serialVersionUID
类中定义以下内容:
Person