2016-04-29 5 views
1

提供されたLinkedListクラスを使用したくないので、カスタムリンクリストを作成しました。javaカスタムのリンクリストをシリアライズ

:問題は、/書き込みオブジェクトfucntionsに

を読んで、私は別のSOあなたは以下のようなカスタムのシリアル化を使用する必要があることポストから見た私は、デフォルトでこのオブジェクトをシリアル化するときに発生することがあり、スタックオーバーフローの問題の心配だということです私はクラスが、それがnullではないでしょう読んだとき、私は、ヘッダフィールドの過渡を作ったので、

MyClass{ 

    transient Node header; 

    private void writeObject(ObjectOutputStream out) throws IOException { 
     out.defaultWriteObject(); 
     for (Entry e = header.next; e != header; e = e.next) 
     out.writeObject(e.element); 
    } 
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 
     in.defaultReadObject(); 
    } 



} 

これは、ノードクラス私は疑問に思ってどのようにこれまで

Node{ 
    transient Node next; 
    transient Node prev; 
    private void writeObject(ObjectOutputStream out) throws IOException { 
     out.defaultWriteObject(); 
     for (Entry e = header.next; e != header; e = e.next) 
     out.writeObject(e.element); 
    } 
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 
     in.defaultReadObject(); 
    } 

} 

のですか?どのようにヘッダノードを参照するようにするのですか...

ノードと同じです。なぜなら、次のフィールドと前のフィールドは、オブジェクトを読み込むと一時的なフィールドなので、フィールドはnullになります。

答えて

1

はい、そうです、それらはnullになります。私は、Javaライブラリ内のリストの読み取りおよび書き込みオブジェクトの実装を検討してお勧めします

while(elementsToRead()); // you need to know somehow how long you need to read 
{ 
    add(inputStream.readObject()); 
} 

はあなたが書き込みオブジェクトを実装し、同様の方法でのreadObjectを実装する必要があります。

Javaのリンクリストを使用できないのはなぜですか?何かが見つからない場合、linkedLlistの拡張を検討しましたか?

基本的にリンクリストのソースコードを見て、シリアル化の実行方法を確認できます。

+0

ライブラリを見ていただきありがとうございます。本当に良いアイデアです! –

関連する問題