2

クラス名が異なる完全に異なるクラスがあると仮定します。serialVersionUIDクラスで異なるものを使用する必要がありますか?

もしそうなら、なぜそれが必要なのですか?

JRE はどのようにデシリアライゼーションを正確に行いますか?

4

1 に答える 1

1

いいえ、異なる SUID は必要ありません (すべてのクラスで 1 を使用できます)。

オブジェクトがシリアル化されるとき、クラス識別子 (package.name.ClassName) と SUID は両方ともヘッダーの一部であり、オブジェクトが属するクラスを識別し、書き込み側と読み取り側の間に非互換性がないことを確認します

ただし、クラスを構造的に変更する (フィールドを追加/削除する) 場合は、そのクラスに新しい SUID を設定する必要があります (デバッグ中に、.class ファイルに基づいて実行時に JVM に新しいものを作成させることができます)。

于 2012-09-19T14:33:46.833 に答える