3

Serailizableではないエンティティの重要な状態データを格納するSerializableオブジェクト記述子を作成しています。アプリケーションのアップグレード間で古い記述子を有効に保つにはどうすればよいですか?私は(アップグレード時に)既知の以前の状態をすべて開き、状態にアップグレードするように促すことを考えていました。多分経由:

void onUpgrade(int oldVersion, int newVersion, int updateFlags);

しかし、これがシリアル化可能なメンテナンスに適した方法であるかどうかはわかりません。

4

2 に答える 2

3

私はあなたの外部表現のための別の形式を提案します。すでに述べたように、シリアル化されたオブジェクトは互換性を維持するのが困難です。最も簡単な方法は、オブジェクトにjaxbアノテーションを付けてから、Jaxbを使用して読み取り/書き込みを行うことです。

于 2012-10-24T17:33:28.843 に答える
1

オブジェクトのバージョン管理の難しさは、一般的に非常に誇張されています。素晴らしいことは、あなたができることとできないことを正しく知って始めることです。オブジェクトシリアル化仕様のオブジェクトバージョン管理セクションのルールをよく見て、それらに忠実に従ってください

  • 継承を変更しないでください。
  • フィールドのデータ型は変更しないでください。
  • フィールドの加算と減算に制限します。
  • そして、serialVersionUIDを変更しないでください。

それでも不十分な場合は、writeReplace()/ readResolve()メカニズムやserializableFieldsメカニズムを使用する準備をしてください。

于 2012-10-24T21:40:40.223 に答える