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


6.2 ストリーム要素

基本構造では、ストリーム内でオブジェクトを表す必要があります。オブジェクトのクラス、フィールド、およびクラス固有のメソッドによって書き込まれ、後で読み取られるデータなどの属性を表現する必要があります。ストリームのオブジェクトの表現は、ある文法によって記述することができます。null オブジェクト、新規オブジェクト、クラス、配列、文字列、およびすでにストリームにあるオブジェクトへのバック参照に対し、特別な表現があります。ストリームに書き込まれた各オブジェクトには、このオブジェクトをバック参照するために使用するハンドルが割り当てられます。ハンドルは、0x7E0000 から始めて順次割り当てられます。ストリームがリセットされると、ハンドルは再び 0x7E0000 から始まります。

クラスオブジェクトは、次の要素によって表されます。

ダイナミックプロキシクラス以外のクラスの ObjectStreamClass オブジェクトは、次の要素によって表されます。

ダイナミックプロキシクラスの ObjectStreamClass オブジェクトは、次の要素によって表されます。

String オブジェクトの表現は、UTF 方式で符号化された文字列長に依存しています。String の UTF エンコーディング長が 65536 バイト未満の場合は、String は、標準の Java UTF-8 形式で書き込まれます。JavaTM 2 SDK, Standard Edition, v1.3 からは、文字列の UTF エンコーディング長が 65536 バイト以上の場合は、「長い」UTF 形式で書き込まれるようになりました。「長い」UTF 形式は、標準の Java UTF-8 形式と同じですが、2 バイトではなく 8 バイトで UTF 文字列を書き込みます。直列化ストリームの String の前にあるタイプコードは、String の書き込みに使用された形式を表しています。

配列は次の要素によって表されます。

ストリームの新規オブジェクトは次の要素によって表されます。

クラスによって書き込まれたすべてのプリミティブデータは、ブロックデータレコードにバッファリングされ、ラップされます。これは、そのデータが writeObject メソッドの中でストリームに書き込まれたのか、writeObject メソッドの外から直接ストリームに書き込まれたのかには関係ありません。このデータは、対応する readObject メソッドによって読み込むか、ストリームから直接読み込むことができます。writeObject メソッドによって書き込まれたオブジェクトは、前に書き込まれたブロックデータレコードがあればそれを停止し、正規オブジェクト、null、またはバック参照のどれかのうちで、適切なものとして書き込まれます。ブロックデータレコードでは、エラーの回復によって任意指定データを破棄することができます。クラスの中から呼び出された場合には、ストリームはデータやオブジェクトを endBlockData まで破棄することができます。



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