目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
ObjectStreamClass
は、直列化ストリームに保管されるクラスの情報を返します。その記述子には、そのクラスの完全修飾名とその直列化バージョン UID が示されます。SerialVersionUID
は、このクラスがストリームを書き込んだり、読み込んだりできる固有のオリジナルクラスバージョンを特定します。package java.io; public class ObjectStreamClass { public static ObjectStreamClass lookup(Class cl); public String getName(); public Class forClass(); public ObjectStreamField[] getFields(); public long getSerialVersionUID(); public String toString(); }lookup
メソッドは、Virtual Machine の指定されたクラスに対するObjectStreamClass
記述子を返します。このクラスにserialVersionUID
が定義されていれば、それがこのクラスから取り出されます。定義されていなければ、Virtual Machine にあるこのクラスの定義から計算されます。指定されたクラスが Serializable でも Externalizable でもない場合、null が返されます。
getName
メソッドは、そのクラスの完全修飾名を返します。このクラス名はストリームに保管され、そのクラスがロードされるときに使われます。
forClass
メソッドは、ObjectInputStream.resolveClass
メソッドがローカルの Virtual Machine 内にClass
を検出した場合に、そのClass
を返します。検出できなかった場合は、null を返します。
getFields
メソッドは、このクラスの直列化可能フィールドを表すObjectStreamField
オブジェクトの配列を返します。
getSerialVersionUID
メソッドは、このクラスのserialVersionUID
を返します。「4.4 ストリーム固有識別子」を参照してください。このクラスによって定義されていない場合は、米国連邦情報局によって定義された Secure Hash Algorithm (SHA) を使って、クラスの名前、インタフェース、メソッド、フィールドから計算された値が返されます。
toString
メソッドは、クラス記述子を表示可能な表現で返します。これには、クラスの名前とserialVersionUID
などが含まれます。
ObjectStreamClass
インスタンスがストリームに書き込まれるとき、クラス名およびserialVersionUID
、フラグ、およびフィールド数が書き込まれます。クラスによっては、その他の情報が書き込まれることもあります。
- 直列化不可能なクラスは、フィールド数が常にゼロです。直列化および外部化フラグビットは設定されません。
- 直列化可能クラスでは、直列化のフラグが設定され、フィールド数には直列化可能フィールドの数がカウントされ、そのあとに各直列化可能フィールドの記述子が続きます。記述子は、標準的な順序で書き込まれます。最初に、プリミティブ型のフィールドの記述子がフィールド名でソートされて書き込まれ、次に、オブジェクト型のフィールドの記述子がフィールド名でソートされて書き込まれます。名前のソートには、
String.compareTo
が使われます。プロトコルは、形式を記述します。- 外部化可能クラスでは、フラグは外部化可能を示すフラグを含み、フィールド数は常にゼロです。