Java 反序列化ArrayList

Java 反序列化ArrayList,java,session,serialization,arraylist,deserialization,Java,Session,Serialization,Arraylist,Deserialization,在新会话中,我无法从Java文件中反序列化对象 我可以将arraylist序列化为文件,然后在同一个会话中对其进行反序列化,但是,如果我创建一个新的主对象并尝试反序列化在上一个会话中工作的同一个文件,那么代码将无法工作 为什么会这样 这是我的密码: public void LoadPersonListFromFile(String Filename) { try { PersonList = new ArrayList<Person>();

在新会话中,我无法从Java文件中反序列化对象

我可以将arraylist序列化为文件,然后在同一个会话中对其进行反序列化,但是,如果我创建一个新的主对象并尝试反序列化在上一个会话中工作的同一个文件,那么代码将无法工作

为什么会这样

这是我的密码:

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();
  }
} 
public void LoadPersonListFromFile(字符串文件名)
{
尝试
{
PersonList=新的ArrayList();
ObjectInputStream in=新ObjectInputStream(新文件输入流(文件名));
ArrayList PersonList=(ArrayList)在.readObject()中;
in.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
public void SavePersonFileToFile(字符串文件名)
{
尝试
{
ObjectOutputStream out=新的ObjectOutputStream(新文件输出流(文件名));
out.writeObject(PersonList);
out.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
} 
编辑

反序列化似乎正在工作,因为如果在LoadPersonListFromFile方法中对列表执行.size()调用,则得到的值为2。但是,如果在LoadPersonListFromFile方法之外调用列表上的.size()方法,则.size()显示为0。为什么会这样?是否需要将反序列化的ArrayList复制到私有字段中

我有以下私有字段将ArrayList存储在类的顶部:

private ArrayList<Person> PersonList;
私有数组列表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();
  }
}
public void LoadPersonListFromFile(字符串文件名)
{
尝试
{
ObjectInputStream in=新ObjectInputStream(新文件输入流(文件名));
.readObject()中的ArrayList PersonListFromFile=(ArrayList);
in.close();
PersonList=PersonListFromFile;
}
捕获(例外e)
{
e、 printStackTrace();
}
}

您似乎没有在
Person
类中定义静态的最终long
serialVersionId
。基本上,当编译源代码中没有定义
serialVersionUID
Serializable
类时,Java编译器将使用随机值为您定义它

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

private static final long serialVersionUID = 1L;

如果有异常,你能分享吗?上面的代码有什么问题?似乎没问题。您是否
Person
类实现了
Serializable
?它是否抛出“InvalidClassException”?没有抛出异常。