3

オブジェクト ストリームとテキスト ストリームを使用して書き込みと読み取りの時間を測定する必要がある作業を行っています。オブジェクト ストリームはテキスト ストリームよりも高速であると予想していましたが、私の結果は両方の状況 (読み取りと書き込み) で正反対の状況でした。どちらが通常速いか誰か教えてもらえますか?

ありがとう。

4

2 に答える 2

4

オブジェクト ストリームの方が速いと考えたのはなぜですか? オーバーヘッドが高い。多くの人は、他のシリアル化メカニズムを好みます。

于 2012-05-22T23:34:22.853 に答える
1

オブジェクト ストリームは、クラス情報をシリアライズおよびデシリアライズする必要があるため、かなりのオーバーヘッドを伴います。これらは、一意のクラスの数が少ない大きなオブジェクト グラフや配列に対してはかなり効率的ですが、小さなメッセージに対しては悪いことで知られています。オブジェクトのシリアライゼーションでは、かなりの簿記も行う必要があります (たとえば、オブジェクト グラフ内のサイクルを検出し、複数の参照がある場合に各オブジェクトが 1 回だけ送信されるようにするなど)。

一方、テキスト ストリームは非常に単純で、オーバーヘッドはほとんどありません。テストでそれらがより高速であることは驚くべきことではありません。

データをテキストにエンコードする方法に大きく依存しますが、オブジェクト グラフの一部の単純なテキスト表現は、実際には通常の Java オブジェクトのシリアル化よりもはるかに悪いものになります。基本的に、テキスト形式で Java オブジェクトのシリアル化を再発明しようとするのは悪い考えです.....

オブジェクトの高速で効率的なシリアル化に関心がある場合は、次のことも考慮する必要があります。

  • Goggle のProtocol BuffersKryoなどの高度なオブジェクトのシリアル化ライブラリ
  • JSON や Clojure の s 式などの効率的なテキスト データ表現形式 (どちらも適切なライブラリ サポートがあり、フィールドで実証されています)
于 2012-05-23T00:27:57.817 に答える