1

次の記事を読みました。

http://javapapers.com/core-java/externalizable-vs-serializable/

オブジェクトの逆シリアル化 (再構成) では、引数のない public コンストラクターを使用してオブジェクトを再構成します。Serializable の場合、コンストラクターを使用する代わりに、オブジェクトは ObjectInputStream から読み取ったデータを使用して再構築されます。
上記の点により、Externalizable オブジェクトには引数のない public コンストラクターが必要であることが要求されます。Seriablizable の場合、必須ではありません。

コンストラクター呼び出しについては本当ですか

シリアライズ可能:デシリアライゼーションは、最も近い非祖先
のコンストラクタのみを呼び出しますSerializable

外部化可能:逆シリアル化は、インターフェイスのみ
を実装するクラスのコンストラクターを呼び出します。Externalizable

?

4

2 に答える 2

1

はい、バイトコードでは、オブジェクトのインスタンスを作成し、階層内の任意のコンストラクターを呼び出すことができます。実際、コンストラクターは特別なメソッドであり、複数回呼び出すことさえできます。

多くのデシリアライザーは Unsafe.allocateInstance() を使用するだけで、コンストラクターを呼び出しません。これは、デシリアライズ時の副作用を最小限に抑えるために行われます。

于 2014-12-23T08:28:36.450 に答える