私の組織では、出力ストリームを使用してオブジェクトを反復的に保存する、カスタムのシリアライゼーション手法を使用しています。次の問題が発生しています。
Parent
とChild
クラスが実装しSerializable
ます。Parent
クラスにはフィールドa,b,c
があり、Child
クラスには がありe
ます。親のシリアライゼーションにフィールドを追加しd
て更新したところ、古いクライアントがシリアライゼーション コードを正しくParent
読み取れなくなりました。Child
これは、Child
シリアル化コードが次のようになるためです。
OutputStream in = getCurrentOutStream();
current_serialization_num = readVersionNum(in) // The version num is similar to Java's UID and is updated when fields are added.
readParent(in)
e = readField(in)
シリアル化は を介して行われるためDataOutputStream
、優れた XML リーダーではこれを処理できません。私はこの問題に対する醜い解決策を持っていますが、それはまったくうまくいきません。そのため、それを紹介することで読者の心を汚染したくありません。ただし、他の人が同様の状況にどのように対処するかを本当に知りたいです。