5

私はそれを読みました

Externalizable は writeExternal() および readExternal() メソッドを提供します。これにより、Java のデフォルトのシリアライゼーションに依存する代わりに、Java シリアライゼーション メカニズムを柔軟に制御できます。

しかし、Serializable と override を実装readObject(), writeObject(), すると、シリアライゼーション プロセスをカスタマイズしているということにもなりませんか?

どう違うの?

ありがとう。

4

2 に答える 2

5

外部化可能とシリアライズ可能の違い

  1. Serializable の場合、デフォルトのシリアル化プロセスが使用されます。一方、Externalizable の場合は、アプリケーションによって実装されるカスタム シリアライゼーション プロセスが使用されます。
  2. JVM は、オブジェクトを復元して永続化するために、java.io.Externalizalbe インターフェイスの readExternel() および writeExternal() へのコールバックを提供します。
  3. 外部化可能なインターフェイスにより、アプリケーションに対するシリアライゼーション プロセスを完全に制御できます。
  4. readExternal() および writeExternal() は、writeObject メソッドおよび readObject メソッドの特定の実装に取って代わります。

Externalizable は完全な制御を提供しますが、スーパー タイプの状態をシリアライズし、Java の一時変数と静的変数の場合にデフォルト値を処理するという課題もあります。正しく使用すると、Externalizable インターフェイスを使用すると、シリアライゼーション プロセスのパフォーマンスを向上させることができます。

だからExternalizableインターフェースに行く

オブジェクトのシリアル化に特別な要件がある場合。たとえば、パスワードなど、オブジェクトの一部のセキュリティが重要な部分を保持してどこかに転送したくない場合があります。または、メイン オブジェクトから参照される特定のオブジェクトを保存しても、その値は復元後に価値がなくなるため、価値がない場合があります。

于 2013-08-27T18:51:18.113 に答える
3

Bean の永続性に関する公式ドキュメント

デフォルトのシリアライゼーションでは処理できないオブジェクトをシリアライズする必要がある場合、またはオブジェクト データ メンバーではないシリアライゼーション ストリームにデータを追加する必要がある場合に、シリアライズされるものをより詳細に制御する必要がある場合は、writeObject を実装します。readObject を実装して、writeObject で書き込んだデータ ストリームを再構築します。

Bean のシリアル化を完全に制御する必要がある場合 (たとえば、特定のファイル形式を読み書きする場合) は、Externalizable インターフェースを使用します。Externalizable インターフェイスを使用するには、readExternal と writeExternal の 2 つのメソッドを実装する必要があります。Externalizable を実装するクラスには、引数のないコンストラクターが必要です。

于 2013-08-27T18:51:50.593 に答える