2

我想知道为什么我的程序只读取 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 对象....知道我做错了什么吗?

4

1 回答 1

1

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

原因:

  • 每次将对象写入文件时。你正在覆盖它。所以你只能写最后一个对象。
  • 即使您确实将 append 设置为 true

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

反序列化会导致

java.io.StreamCorruptedException: invalid type code

要克服它:

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

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

于 2013-06-01T16:55:03.847 回答