反序列化ArrayList

时间:2013-05-13 07:38:26

标签: java session serialization arraylist deserialization

我无法在新会话中使用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();
  }
}

1 个答案:

答案 0 :(得分:1)

您似乎没有在serialVersionUID类中定义静态最终长Person。基本上,当您编译在源代码中没有定义Serializable的{​​{1}}类时,Java编译器将为您定义具有随机值的类。

要解决此问题,请在serialVersionUID类中定义以下内容:

Person