2

逆シリアル化中にオブジェクトのクラスから変数を削除しても例外がスローされないのはなぜですか? シリアライゼーションにおける「互換性のない」変更はどういう意味ですか? また、クラスのフィールドを非静的から静的に変更しました。これは、Java 仕様に従っています。

互換性がありません。

4

2 に答える 2

3

逆シリアル化中にオブジェクトのクラスから変数を削除しても例外がスローされないのはなぜですか?

それは想定されていないからです。オブジェクトのバージョニング仕様 #5.6.1を参照してください。

「フィールドの削除 - クラスでフィールドが削除された場合、書き込まれたストリームにはその値が含まれません。ストリームが以前のクラスによって読み取られると、値が使用できないため、フィールドの値はデフォルト値に設定されます。ただし、このデフォルト値は、以前のバージョンが契約を履行する能力を損なう可能性があります。」

「非静的フィールドを静的に変更するか、非一時フィールドを一時的に変更する - デフォルトのシリアル化に依存している場合、この変更はクラスからフィールドを削除することと同じです。このバージョンのクラスはそのデータをストリームに書き込まないため、クラスの以前のバージョンで読み取れるようにします。フィールドを削除するときと同様に、以前のバージョンのフィールドはデフォルト値に初期化され、予期しない方法でクラスが失敗する可能性があります。

例外のスローについては何もありません。

于 2013-06-06T07:04:06.023 に答える