目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
直列化可能オブジェクトでは、サブクラスのインスタンスが直列化復元され、直列化ストリームがそのクラスを直列化復元されたオブジェクトのスーパークラスとしてリストしない場合、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
が呼び出されます。