違いは何ですかSerializable
そしてExternalizable
Java では?
ベストアンサー1
他の回答に加えて、 を実装するとjava.io.Serializable
、クラスのオブジェクトに対して「自動」シリアル化機能が得られます。他のロジックを実装する必要はなく、そのまま機能します。Java ランタイムはリフレクションを使用して、オブジェクトをマーシャリングおよびアンマーシャリングする方法を判断します。
以前のバージョンの Java では、リフレクションが非常に遅く、大きなオブジェクト グラフ (クライアント サーバー RMI アプリケーションなど) をシリアル化すると、パフォーマンスに多少問題がありました。この状況に対処するために、 にjava.io.Externalizable
似ていますが、マーシャリングおよびアンマーシャリング機能を実行するカスタム記述メカニズムを備えたインターフェイスが提供されました(クラスに メソッドをjava.io.Serializable
実装する必要があります)。これにより、リフレクションのパフォーマンス ボトルネックを回避する手段が得られます。readExternal
writeExternal
最近のバージョンの Java (1.3 以降) では、リフレクションのパフォーマンスが以前よりも大幅に向上しているため、この問題はそれほど大きくありません。最新の JVM では、意味のあるメリットを得るのは難しいと思いますExternalizable
。
また、組み込みの Java シリアル化メカニズムは唯一のものではなく、JBoss Serialization などのサードパーティ製の代替品も利用できます。JBoss Serialization は、かなり高速で、デフォルトの代替品としてそのまま使用できます。
の大きな欠点はExternalizable
、このロジックを自分で管理する必要があることです。クラス内のフィールドを追加、削除、または変更する場合は、それを考慮してwriteExternal
/メソッドを変更する必要があります。readExternal
要約すると、Externalizable
これは Java 1.1 時代の遺物です。もう本当に必要ありません。