3

プロジェクトでは、シリアル化されたいくつかのオブジェクトがあります。これらのオブジェクトは、異なる JVM (おそらく異なるバージョン) を備えたマシンで使用する必要があります。

オブジェクト serialVersionUID は固定されており、変更されませんが、シリアル化されたオブジェクトで使用される ArrayList/HashSet などの JVM 標準オブジェクトの serialVersionUID について懸念があります。

問題は、これらの serialVersionUID が JVM の異なるバージョン間または異なる JVM 間で変更できるかということです。

それとも、異なる JVM をサポートするために別のシリアル化メカニズムを使用する必要がありますか?

4

2 に答える 2

3

serialVersionUID は、以前にシリアライズされたバージョンと互換性がないクラスへの変更がある場合にのみ変更する必要があります。

互換性を損なう可能性のある変更を確認するには、仕様を確認してください

Java の新しいバージョンが、互換性を壊すような変更をコア クラスに導入することは非常に疑わしいです。

于 2013-07-25T10:12:35.430 に答える
-1

クラスのバージョン コードとして使用serialVersionUIDします。クラスを変更するときは、このフィールドを変更する必要があります。このフィールドは、逆シリアル化でクラスの ID として使用されます。

たとえば、クラス A のオブジェクトをシリアル化してバイナリ ファイルに保存すると、後でファイルを元のオブジェクトに逆シリアル化できます。ただし、フィールドを A に追加し、serialVersionUID を変更しない場合、逆シリアル化によって不正なオブジェクトが返される可能性があります。を変更するserialVersionUIDと、デシリアライゼーションは入力を拒否し、例外をスローします。例外は未知のエラーよりも優れています。

これらのエラー/例外は、古いシリアル化の結果を使用して変更されたクラスのインスタンスを作成した場合にのみ発生します。データの永続化にシリアル化を使用しない場合、問題はありません。

于 2013-07-25T11:10:16.447 に答える