2013-06-01 41 views
2

我想知道爲什麼我的程序只讀1.寫入對象的元素。 我有2類:ArrayList的反序列化只讀取一個對象

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對象.... 任何想法我做錯了什麼?

+1

您可能在列表中有5個元素,但在序列化書籍時最後的4個元素爲null。即該錯誤在您的代碼中有99.9999%的機會。隨着您發佈的代碼,無法解釋原因。創建一個重現問題的SSCCE,併發布此SSCCE。 –

+0

嗯,我可以給你甚至完整的代碼,但我的5個元素存在。我與他們合作,可以打印他們,但是當我保存它們,然後加載到我的程序中時,我只看到第一個官方的,而其他的都是空的 –

+0

創建一個可以想象重現問題的最小完整程序,並將其發佈到此處。 –

回答

1

您只能從文件(序列化)中讀取一個對象。

的原因:

  • 每次對象寫入文件的時間。你正在覆蓋它。所以你 只能得到最後寫的對象。
  • 即使你不追加設置爲true

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

反序列化會導致

java.io.StreamCorruptedException: invalid type code 

爲了克服它:

1.你可以把你所有的對象一個列表並將其作爲一個整體寫入(您的數組列表)。 作爲一個整體序列化對象列表並反序列化它。

2.您可以將每個對象寫入不同的文件並從中讀取。

+0

這解決了您的問題,或者這是您的問題? – Dineshkumar

+0

問題出在他的代碼中。他已經在評論中說過了。他有一個問題是他的序列化代碼,它不是一個Java API錯誤或別的。 – davidbuzatto

+0

最後我解決了這個問題 - 看起來很有效。 但我只從「static Book Libro = new Book();」中移除了「static」 我完全不知道有什麼區別,但似乎有效O_O –