【发布时间】:2013-05-07 04:30:16
【问题描述】:
我在新会话中从 Java 文件中反序列化对象时遇到问题。
我可以将 arraylist 序列化为文件,然后在同一个会话中反序列化它,但是,如果我创建一个新的 Main 对象并尝试反序列化在前一个会话中工作的同一个文件,则代码不起作用。
为什么会这样?
这是我的代码:
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();
}
}
【问题讨论】:
-
如果有异常可以分享一下吗?
-
以上代码有什么问题?好像没问题。
-
你
Person类实现Serializable吗? -
它会抛出“InvalidClassException”吗??
-
不抛出异常。
标签: java session serialization arraylist deserialization