2012-03-21 14 views
2

は、これは(LinkedListのは、SerializableをデシリアライズJavaは、LinkedListの

private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException 
{ 
     // Read in any hidden serialization magic 
     s.defaultReadObject(); 

     // Read in size 
     int size = s.readInt(); 

     // Read in all elements in the proper order. 
     for (int i = 0; i < size; i++) 
      linkLast((E)s.readObject()); 
} 

からのreadObjectを実装して、私は一般的に

FileOutputStream fos = new FileOutputStream("list.ser"); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(list); 
oos.close(); 
fos.close(); 

ことにより、同様の方法でファイルのリストを復元しようとする試みを提出することをシリアル化するために管理方法ですoos.readObject())はOptionalDataExceptionで終わります。 これを行う適切な方法は何ですか?

+1

完全なコードを教えてください。 'ObjectInputStream'と同じくらい簡単で、' readObject'メソッドを使うべきです。 –

+0

リストを復元するために使用する正確なコードを確認できますか? –

+0

oos.readObject()の 'oos'は' ObjectOutputStream'ですか? – Brambo

答えて

0

これはトリックを行う必要があります、と私は思います。

FileInputStream fis = new FileInputStream("list.ser"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    List list = (List) ois.readObject(); 
    ois.close(); 

OptionalDataExceptionのJavadocを読むために良いでしょう。例外がスローされる状況の詳細に入ります。これは何がうまくいかないのかを理解するための手がかりを提供するはずです。

0

私が考えている問題は、タイプが不明(E)のオブジェクトをシリアル化しているということです。明示的なキャストを追加するため、最初のアプローチは機能しますが、Javaは未知のタイプEにキャストできないため、2番目のキャストは失敗します。これは私の推測では間違っているかもしれません。

0

問題はおそらくLinkedListにありません。これらの基本型は、常に(非)直列化できます。しかしリストはピクチャのほんの一部に過ぎません。シリアライゼーションは、のすべてのオブジェクトがリストを(非)直列化できる場合にのみ機能します。

私の推測では、例外は別の場所にスローされます。リスト内の各オブジェクトが動作することを確認します。

関連する問題