重複の可能性:
Java のシリアル化バージョン uid
Java シリアライゼーション メカニズムは静的フィールドを無視することがわかっています。これである場合、デシリアライザーがシリアライザーの serialVersionUID をどのように認識しているか。serialVersionUID は常に、シリアル化されるクラスの静的フィールドです。ご協力ありがとうございました。
チェン
重複の可能性:
Java のシリアル化バージョン uid
Java シリアライゼーション メカニズムは静的フィールドを無視することがわかっています。これである場合、デシリアライザーがシリアライザーの serialVersionUID をどのように認識しているか。serialVersionUID は常に、シリアル化されるクラスの静的フィールドです。ご協力ありがとうございました。
チェン
は静的ですがserializedVersionUID
、ストリームに書き込まれます。
次に、逆シリアル化で使用され、現在使用可能なバージョンのクラスのものと比較されます。
すべてのインスタンスの一部として記述されているのではなく、それを使用するストリーム内のすべてのインスタンスのクラスを定義する「ObjectStreamClass」の一部として記述されていることに注意してください。
Class
逆シリアル化された は にあるためClasspath
、すべてのデータが認識されます。
更新(@Thiloに感謝):
"and equally importantly, the serializedVersionUID is written to the stream, even though it is static." – Thilo
serialVersionUID
「シリアル化された」オブジェクトのインスタンスが格納されていないクラスから取得されます。定義されている場合は、コンパイルされたバイトコードに「格納」されます。定義されていない場合は、何らかのアルゴリズムを使用して計算されます。
Serializable
インターフェイスを実装するクラスのバイトコードは以下を参照してください。