【问题标题】:Deserialization of ArrayList reads only one objectArrayList的反序列化只读取一个对象
【发布时间】:2013-06-01 15:24:26
【问题描述】:

我想知道为什么我的程序只读取 1. 写入对象的元素。 我有 2 节课:

public class Sheet implements Serializable{

int something1;
String something2;
}

下一个:

public class Book implements Serializable{

ArrayList<Sheet> menu = new ArrayList<Sheet>();

public void newSheet(Sheet temp)
{ menu.add(temp);}

}

保存书(在类主书是静态书图书馆=新书();)

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream        ("libro.obiekt"));
                out.writeObject(Libro);
                out.close();

阅读:

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("libro.obiekt"));
        Libro = (Book) in.readObject();
        in.close();

当我这样做时,例如:Libro 内的 ArrayList 中有 5 个对象,我只能读取第一个,而其他 4 个将是 NULL 对象.... 知道我做错了什么吗?

【问题讨论】:

  • 在序列化图书时,列表中可能有 5 个元素,但最后 4 个元素为空。 IE。该错误有 99.9999% 的机会出现在您的代码中。使用您发布的代码,无法解释原因。创建一个重现问题的 SSCCE,然后发布此 SSCCE。
  • 好吧,我什至可以给你完整的代码,但我的 5 个元素是存在的。我使用它们,可以打印它们,但是当我保存它们并稍后加载到我的程序中时,我只看到第一个初始化,而其他的是 NULLs
  • 创建您能想象到的最小的完整程序来重现问题,并将其发布在此处。
  • 我已经创建了一个小项目,但没有使用 GUI,而且它可以工作...我需要找出我的 mani 项目糟糕的原因:-/
  • 恭喜你做到了。它至少证明了该错误存在于您的代码中。这样做通常可以找到原始代码中的错误所在。祝你好运找到它。使用调试器,并为工作表列表添加监视。

标签: java serialization arraylist


【解决方案1】:

您只能从文件中读取一个对象(序列化)。

原因:

  • 每次将对象写入文件时。你正在覆盖它。那么你 只能获取最后写入的对象。
  • 即使你确实将 append 设置为 true

    FileOutputStream fout = new FileOutputStream(new File(file),true);
      //setting the append to true
    

反序列化会导致

java.io.StreamCorruptedException: invalid type code

克服它:

1.您可以将所有对象放在一个列表中并将其作为一个整体写入(您的数组列表)。 将对象列表作为一个整体序列化并反序列化。

2。您可以将每个对象写入不同的文件并从中读取。

【讨论】:

  • 问题出在他的代码中。他已经在cmets中说过了。他有一个问题是他的序列化代码,它不是 Java API 错误或其他任何东西。
  • 最后我解决了这个问题 - 似乎它有效。但我只从“static Book Libro = new Book();”中删除了“static”我完全不知道有什么区别,但似乎有效 O_O
  • @VardensArchangel 写了不止一个并且反序列化了?
  • 我已经解决了这个问题:就在将新数据保存到文件之前,我读取了我以前的文件,将其添加到我的列表中,然后序列化整个列表。如果我想保持顺序,我:创建新列表,将文件读入其中,添加我的“新”数据,然后序列化。
猜你喜欢
  • 2015-08-19
  • 2015-03-18
  • 1970-01-01
  • 2020-08-02
  • 2017-08-25
  • 2015-05-29
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多