| 目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
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.5 以前のリリースで
PROTOCOL_VERSION_2で記述されたストリームのExternalizableオブジェクトを読み込もうとすると、StreamCorruptedExceptionがスローされます。互換性の問題に関する詳細は、「6.3 ストリームプロトコルのバージョン」を参照してください。