2009-03-31 9 views

答えて

19

Josh Blochの Effective Java、Second Editionの最後のセクションには素晴らしい説明があります。

クラスAをシリアライズ可能にしたいとします。まず、Serializableを実装することを宣言します。次に、シリアル化メソッドwriteReplace()を使用して、Aのインスタンスの代わりにシリアル化される、いわゆる「シリアル化プロキシ」を返します。 writeReplace()メソッドはパブリックである必要はありません。 Aのデフォルトのシリアル化は実行されません。そのため、AのすべてのAPIプロパティが維持されます。

通常、プロキシは、それ自体がSerializable(または読み取り/書き込みプロセスを完全に制御するためにExternalizable)を実装する必要があるプライベート静的ネストされたクラスとして実装されます。プロキシはプライベートなので、引数のないコンストラクタや変更可能なものなどの実装の詳細は隠されます。

プロキシは、デシリアライズ時にオブジェクトを再構成できるように、書き込む元のオブジェクトの状態を十分に保存します。デシリアライズ時に、プロキシはのインスタンスを返すためにreadResolve()メソッドを使用します。シングルトンの場合、これはシングルトンインスタンスそのものになります。

詳細なブログエントリを例文Serializing Immutables and Singletons with a Serialization Proxyで書きました。

+0

シリアル化プロキシがExternalizableになるかどうか疑問に思っていました。この本にはSerializableしか書かれていない。ありがとう! –

関連する問題