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


3.5 readObjectNoData メソッド

直列化可能オブジェクトでは、サブクラスのインスタンスが直列化復元され、直列化ストリームがそのクラスを直列化復元されたオブジェクトのスーパークラスとしてリストしない場合、readObjectNoData メソッドを使うと、クラスが自らのフィールドの初期化を制御することができます。これは、受け取り側が、送り側とは異なるバージョンの直列化復元されたインスタンスのクラスを使用し、受け取り側のバージョンが送り側のバージョンによって継承されないクラスを継承する場合に発生する可能性があります。また、直列化ストリームが改変された場合にも発生することがあります。したがって、readObjectNoData は、「悪意のある」または不正なソースストリームであっても、直列化復元されたオブジェクトを正しく初期化するのに役立ちます。

  private void readObjectNoData() throws ObjectStreamException;
直列化可能クラスごとに、そのクラス独自の readObjectNoData メソッドを定義することができます。直列化可能クラスが readObjectNoData メソッドを定義しない場合、上記の状況では、クラスのフィールドはデフォルト値 (「JavaTM Language Specification, Second Edition」の 4.5.5 に記載) に初期化されます。この動作は、readObjectNoData メソッドのサポートが導入された JavaTM 2 SDK, Standard Edition バージョン 1.4 以前の ObjectInputStream の動作と一致します。直列化可能クラスが readObjectNoData メソッドを定義する場合に前述の状況が発生すると、クラス定義の readObject メソッドが呼び出されたときに、そのクラスがストリームによって直列化復元するインスタンスのスーパークラスとしてリストされていれば、直列化復元中のその時点で readObjectNoData が呼び出されます。



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