目次 | 前の項目 | 次の項目 Java オブジェクト直列化仕様


3.5 readExternal メソッド

java.io.Externalizable を実装するオブジェクトは、readExternal メソッドを実装して、そのオブジェクトの状態全体を復元しなければなりません。このオブジェクトは、 そのスーパークラスと連携してそれらの状態を復元する必要があります。ObjectInput のすべてのメソッドが、そのオブジェクトのプリミティブ型のフィールドとオブジェクトフィールドを復 元するために使用できます。

    public void readExternal(ObjectInput stream)
        throws IOException;

注 - readExternal メソッドは public であるため、クライアントがストリームの既存オブジェクトを上書きしてしまう危険性があります。クラ スで独自にチェックを追加して、適切なときにだけ呼び出されるようにすることもできます。
JDKTM 1.2 では、Externalizable オブジェクトの問題を修正するために、新しいストリームプロトコルのバージョンが導入されました。Externalizable オブジェクトの以前の定義では、ストリームから Externalizable オブジェクトを適切に読み込めるようにするために、ローカルの Virtual Machine が readExternal メソッドを探す必要がありました。新しい形式では、十分な情報がストリームプロトコルに追加されるの で、ローカルの readExternal メソッドが使えない場合は、直列化で Externalizable オブジェクトをスキップすることができます。クラスの展開規則により、ローカルクラスを使ったオブジ ェクトのマッピングがない場合は、入力ストリーム内の Externalizable オブジェクトはスキップできます。

新しい Externalizable ストリーム形式では、そのほかに、readExternal メソッドが Externalizable オブジェクトの終端よりあとの部分を読み取ろうとすると、EOFException 例外がスローされるという利点があります。また、直列化では、readExternal メソッドで読み込むことができない外部データをスキップできます。

この形式の変更のため、JDKTM 1.1.6 以前のリリースでは、この新しい形式を読み込むことができません。 JDKTM 1.1.6 以前のリリースで PROTOCOL_VERSION_2 で記述されたストリームの Externalizable オブジェクトを読み込もうとすると、StreamCorruptedException がスローされます。 互換性の問題に関する詳細は、「6.3 ストリームプロトコルのバージョン」を参照してください。



目次 | 前の項目 | 次の項目
Copyright © 1997-1999 Sun Microsystems, Inc. All Rights Reserved.