ArrayList的反序列化只读取一个对象

时间:2013-06-01 15:24:26

标签: java serialization arraylist

我想知道为什么我的程序只读取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);}

}

保存书(在主要书籍中是静态书籍Libro =新书();)

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对象.... 知道我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

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

原因:

  • 每次将对象写入文件。你正在覆盖它。那么你 只能写最后一个对象。
  • 即使你设置了追加到真的

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

反序列化将导致

java.io.StreamCorruptedException: invalid type code

要克服它:

<强> 1。您可以将所有对象放在一个列表中并将其作为一个整体(您的arraylist)编写。 序列化整个对象列表并对其进行反序列化。

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