java - 反序列化 ArrayList

标签 java session serialization arraylist deserialization

我在新 session 中从 Java 文件中反序列化对象时遇到问题。

我可以将数组列表序列化到文件,然后在同一 session 中反序列化它,但是,如果我创建一个新的 Main 对象并尝试反序列化在上一个 session 中工作的同一文件,则代码将不起作用。

为什么会这样?

这是我的代码:

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();
  }
} 

编辑

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

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

private ArrayList<Person> PersonList;

编辑2

成功了。这是代码:

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 类中定义 static final long serialVersionUID 。基本上,当您编译源代码中没有定义 serialVersionUIDSerialized 类时,Java 编译器会使用随机值为您定义它。

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

private static final long serialVersionUID = 1L;

关于java - 反序列化 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16516982/

相关文章:

javascript - 有没有办法在 JavaScript 中使用 Java SE jar?

java - 检查java中列表是否包含另一个列表的任何项目

java - 通用 map 不使用嵌套结构进行编译

Java Request.isRequestedSessionValid() session 过期后仍然为 true

session - 在 ASP.NET Core MVC Identity 中部署 Docker 后自动注销

java - 将文件中的字符串追加到数组中并解析它

serialization - 为什么锁在Java中是可序列化的?

Java - 如何按从下到上的顺序添加面板?

php - AWS Elastic Beanstalk 和 PHP session

c# - 字典 X​​ML 序列化