目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
バージョン管理された各クラスでは、オリジナルクラスバージョンを指定する必要があり、それによってストリームの書き込み、読み込みが可能になります。たとえば、バージョン管理されたクラスは、次のように宣言する必要があります。private static final long serialVersionUID = 3487495895819393L;ストリーム固有識別子は、クラス名、インタフェースクラス名、メソッド、フィールドをハッシュした 64 ビットの値です。最初のバージョンを除くクラスのすべてのバージョンで、この値を宣言する必要があります。この値は、オリジナルクラスに宣言することもできますが、必須ではありません。互換性のあるすべてのクラスで、この値は一定です。クラスに対してこの SUID を宣言しないと、この値はそのクラスのハッシュになります。Serializable
クラスではバージョン管理を考慮する必要はありませんが、Externalizable
クラスではその必要があります。Externalizable
クラスの初期バージョンでは、将来的に拡張可能なストリームデータ形式を出力する必要があります。readExternal
メソッドの初期バージョンは、writeExternal
メソッドの将来のすべてのバージョンの出力形式を読み取り可能でなければなりません。
serialVersionUID
は、そのクラス定義を反映したバイトストリームのシグニチャーを使って計算されます。ストリームのシグニチャーの計算には、米国連邦情報技術局 (NIST) の Secure Hash Algorithm (SHA-1) が使用されます。64 ビットハッシュには、最初の 2 つの 32 ビットが使われます。プリミティブデータ型からバイト列への変換には、java.lang.DataOutputStream
が使用されます。このストリームへ入力される値は、クラスに対する JavaTM Virtual Machine (VM) の指定によって定義されます。
<clinit>
()V