目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
Externalizable オブジェクトの場合、そのオブジェクトのクラスを識別する情報だけがコンテナによって保管されます。クラスは、それらのコンテナを保管し復元する必要があります。Externalizable
インタフェースは、次のように定義されます。package java.io; public interface Externalizable extends Serializable { public void writeExternal(ObjectOutput out) throws IOException; public void readExternal(ObjectInput in) throws IOException, java.lang.ClassNotFoundException; }Externalizable オブジェクトのクラスの要件は、以下のとおりです。
java.io.Externalizable
インタフェースを実装する必要がある- オブジェクトの状態を保管する
writeExternal
メソッドを実装する必要がある
(スーパータイプと明示的に連携して、その状態を保管する必要がある)readExternal
メソッドを実装して、writeExternal
メソッドで書き込まれたデータをストリームから読み込み、そのオブジェクトの状態を復元する必要がある
(そのスーパータイプと明示的に連携して、それの状態を保管する必要がある)- 外部で定義された形式の場合は、その形式を全面的に
writeExternal
とreadExternal
メソッドの責任下にする必要がある- public で引数なしのコンストラクタを持つ必要がある
注 -writeExternal
とreadExternal
のメソッドは public であるため、クライアントが、オブジェクトのメソッドとフィールドを使わずにオブジェクトの情報を書き込んだり、読み込んだりできる危険性があります。これらのメソッドを使うのは、オブジェクトで表す情報が機密に属するものでないときや、書き込みや読み込みがあっても機密保護を妨害する可能性のない場合だけにしなければなりません。
Externalizable クラスは、オプションで次のメソッドを定義できます。
- ストリームに書き込まれる置換オブジェクトを、クラスが指定できるようにする
writeReplace
メソッド
(詳細は、「2.5 writeReplace メソッド」を参照)- ストリームから読み込まれたオブジェクトに対する置換オブジェクトを、クラスが指定できるようにする
readResolve
メソッド
(詳細は、「3.6 readResolve メソッド」を参照)