0

変数ABCを持つシリアル化されたクラスがあります。クラスでserialVersionUIDを宣言します。ベクトルを使用して、クラスのインスタンスをテキストファイルに保存します。クラスを変更する(変数Dを追加する)とすると、2つの異なるクラス(ファイルから読み取ろうとしているABCとファイルにあるABCD)があります。serialVersionUIDを同じに保つと、読み込もうとしているものがABCのみであるというDセンスを省略できますか?例:

Class MyClass implements serializable
{
    serialVersionUID = 12345;
    int a = 0;
    int b = 0;
    int c = 0;  
}

Class implmentation
{
   MyClass me = new MyClass();
   me.a = 2;
   me.b = 4;
   me.c = 6;
} 

//objectOutputStreamを使用してtxtファイルに保存します

//後でmyClassを変更してintd=0を追加します。

テキストファイルから元のmyClassオブジェクト(me)を読み取りたい場合でも、それを読み取ることはできますか?

申し訳ありませんが、SSCCEを持っていませんが、作業を開始する前に確認したいと思います。

4

2 に答える 2

2

こちらをご覧くださいhttp://denis-zhdanov.blogspot.com/2009/09/serialversionuid-update-policy-on-class.html

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

フィールドの追加 - 再構成中のクラスにストリーム内に存在しないフィールドがある場合、オブジェクト内のそのフィールドはそのタイプのデフォルト値に初期化されます。クラス固有の初期化が必要な場合、クラスは、フィールドをデフォルト以外の値に初期化できる readObject メソッドを提供する場合があります。

于 2012-08-02T14:45:45.710 に答える
0

査読もレビューもされていないサードパーティのブログに頼るのではなく、Object Serialization Specification のObject Versioningセクションを参照してください。

于 2012-08-05T09:52:44.083 に答える