目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
ObjectStreamClass の直列化された形式は、その形式が表現する Class オブジェクトが直列化可能であるかどうか、外部化可能であるかどうか、またはダイナミックプロキシクラスであるかどうかによって異なります。ダイナミックプロキシクラスを表現しない
ObjectStreamClass
インスタンスがストリームに書き込まれるとき、クラス名とserialVersionUID
、フラグ、およびフィールド数が書き込まれます。クラスによっては、その他の情報が書き込まれることもあります。
- 直列化が不可能なクラスは、フィールド数が常にゼロです。直列化および外部化フラグビットは設定されません。
- 直列化可能クラスでは、直列化のフラグが設定され、フィールド数には直列化可能フィールドの数がカウントされ、そのあとに各直列化可能フィールドの記述子が続きます。記述子は、標準的な順序で書き込まれます。最初に、プリミティブ型のフィールドの記述子がフィールド名でソートされて書き込まれ、次に、オブジェクト型のフィールドの記述子がフィールド名でソートされて書き込まれます。名前のソートには、
String.compareTo
が使われます。この形式の詳細については、「6.4 ストリーム形式の文法」を参照してください。- 外部化可能クラスでは、フラグは外部化可能を示すフラグを含み、フィールド数は常にゼロです。
ObjectOutputStream がダイナミックプロキシクラスの ObjectStreamClass 記述子を直列化するとき、Class オブジェクトを java.lang.reflect.Proxy の isProxyClass メソッドに渡すことによって決定されるとおり、ダイナミックプロキシクラスが実装するインタフェース数を記述し、その後にインタフェースの名前を続けます。ダイナミックプロキシクラスの Class オブジェクトの getInterfaces メソッドの呼び出しから返される順序に従ってインタフェースがリストされます。ダイナミックプロキシクラスおよび非ダイナミックプロキシクラスの ObjectStreamClass 記述子の直列化表現は、使用するタイプコードの種類 (TC_PROXYCLASSDESC および TC_CLASSDESC のどちらか) によって異なります。文法の仕様についての詳細は「6.4 ストリーム形式の文法」を参照してください。