【问题标题】:Deserializing an ArrayList反序列化 ArrayList
【发布时间】: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


【解决方案1】:

您似乎没有在 Person 类中定义静态最终长 serialVersionUID。基本上,当你编译一个在源代码中没有定义serialVersionUIDSerializable 类时,Java 编译器会为你定义一个随机值。

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

private static final long serialVersionUID = 1L;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多