2014-01-17 137 views
0
public void writeObject(String outFile) { 
    try { 
     FileOutputStream fos = new FileOutputStream(outFile); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     Student[] copy = this.getStudents(); 
     for (Student st : copy){  
      oos.writeObject(st);} 
     oos.close(); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 

} 

上面的代碼是我用來序列化存儲庫內容的函數,getStudens()返回的是我的數據數組。序列化問題

應該重建我的數據,在我repository.The問題再次添加
public void readSerialized(String fileName) throws Exception { 
    FileInputStream fis = new FileInputStream(fileName); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    while(fis.available()>0){ 
    ctrl.addC((Student) ois.readObject());} 
    ois.close(); 
    } 

這是我的反序列化功能是,它不會重新創建我在庫中有當我第一次序列化的數據。 我有什麼在倉庫系列化前:

1 a 4.0 6.0 
2 b 10.0 10.0 
3 c 2.0 2.0 
4 d 8.0 2.0 
5 e 6.0 2.0 

什麼反序列化回報:

0 3.0 
0 5.0 

這是否意味着我的序列化功能不正確或當我反序列化出錯?

回答

0

您的代碼是不必要的複雜,使用available()總是相當混亂,我發現。這意味着你可以在沒有系統調用的情況下閱讀,這並不意味着什麼都沒有了。我建議只序列化數組。

FileOutputStream fos = new FileOutputStream(outFile); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(this.getStudents()); 
oos.close(); 

FileInputStream fis = new FileInputStream(fileName); 
ObjectInputStream ois = new ObjectInputStream(fis); 
Student[] copy = (Student[]) ois.readObject(); 
ois.close(); 

在Java中,數組也是對象。

+0

試過這個,但是當我再次在屏幕上打印時,它不會顯示字符串'a','b'等等,只有數字 – Matt

+0

我的猜測是您正在嘗試打印String [ ]'應該看起來像'[String @ 7ef27456'這與串行化無關,但array.toString()實際上是無用的。我建議打印'Arrays.toString(複製)' –

+1

這意味着你可以無阻塞地閱讀。這可能意味着兩個系統調用,而不是一個。 – EJP