0

readObject() と writeObject() をオーバーライドすることで、シリアル化をカスタマイズできることを理解しています。しかし、これを行う必要があるのは何でしょうか? ユースケース?

また、Externalizable インターフェイスも、カスタムのシリアル化を提供する方法にすぎませんか、それとも他の目的に役立ちますか?

4

2 に答える 2

3

私の頭の上からのユースケース:

  • 他の非一時変数から計算された一時変数の値を復元する
  • デフォルトのものよりもコンパクトで効率的なシリアライズのためのオブジェクトの表現を使用する
  • クラスの以前のバージョンとの下位互換性を維持する

Externalizable の javadoc は、それが何のために使用されるかを説明しています。

于 2013-08-18T17:49:19.283 に答える
3

実践からのよく知られた例: HashMap. 複雑な内部構造がたくさんありますが、API はかなり単純で、カスタマイズ パラメーターも含まれています。デフォルトのシリアライゼーションを使用した場合、かなりの量の冗長な情報 (空のバケット、バケットの空の部分、配列へのすべてのインデックスなど) をシリアライズする必要があります。

代わりにHashMap、相手側でデータを再構築するために必要なすべてのデータのみを転送する単純で単純なシリアル化された形式を定義します。

于 2013-08-18T18:03:48.700 に答える