Javaのデフォルトのシリアル化メカニズムは、a)リフレクションによって書き込み/読み取りを行うフィールドを検出します。通常は遅いです。b)余分なデータをストリームに書き込むためです。Java:writeObject vs writeExternalの効率
これをより効率的にする方法の1つは、ExternalizableメソッドとそのwriteExternal/readExternalメソッドを実装することです。
ここに質問があります:代わりに 'writeObject/readObject'メソッドを提供し、それらのメソッドでdeafiltWriteObject/defaultReadObjectを呼び出さないと、このメカニズムはリフレクションを使用して書き込み/読み取りするフィールドを特定します余分なデータをストリームに書き込むことはできません(またはそれはわかりません)。ですから、効率性の観点から、上記のwriteObject/readObjectを実装しているのは、Externalizableですか?あるいは、後者のオプションは、前者ではない実際的なメリットをいくつか与えていますか?
EDIT:readObject/writeObjectを実装しているSerializableクラスがサブクラス化されている場合、サブクラスに独自のreadObject/writeObjectがある場合、superのreadObject/writeObjectを呼び出す必要はありません。スーパー/サブクラスが代わりにExternalizableを実装する場合はそうではありません。この場合、superのwriteExternal/readExternalを明示的に呼び出す必要があります。 しかし、この違いは効率の観点からは関係ありません。
お願いします。これについてもう少し説明してください。「次に呼び出すクラス/ writeObject/readObjectを選択するには、まだ頭がおかしくなっています。また、 'readResolve'は 'Externalizable'契約の一部ではありません。だから少し混乱している。 – shrini1000
あなた自身もそうしない限り、readObjectまたはreadExternalを呼び出すクラスを決定する必要があります。 readResolveは、Serailizableでも使用できるオプションのメソッドです。詳細については、最初のリンクを参照してください。 –
Thx。私はreadResolveを使用しましたが、あなたがExternalizableに関連してそれを述べたので、混乱しました。 Btw、私はあなたの記事を読んでいます。良いもの。私はそこに質問をしました。もしあなたがplできるなら、それは素晴らしいことでしょう。応答。 – shrini1000