3

これが私の問題です。1 つの大きな gzip ファイルです。何百万ものメッセージ。

各メッセージは次のもので構成されます。

***************** *************** ****************** 
* 2-byte LENGTH * * 1-byte TYPE * * N-byte PAYLOAD * , where N = (LENGTH-1).
***************** *************** ******************

に応じて、TYPEのオフセットから数バイトを読み取り、PAYLOADメッセージを受け入れるか拒否するかを選択する必要があります。

私は java.io.DataInputStream を使用してこの種のことを行う方法を知っていますが、これは java.nio.ByteBuffer の完璧なアプリケーションのようです (こちらを参照してください! )。ただし、セットアップの助けが必要です。

では、ByteBuffer を使用して gzip ファイルからメッセージを読み取るにはどうすればよいでしょうか?

アップデート

私が見たいのは、ByteBuffer を効果的に使用するための正しい軌道に乗せることができるコードの骨格実装だと思います。ありがとう!

4

2 に答える 2

2

質問に答えなくて申し訳ありませんが、ここで DataInputStream よりも ByteBuffer を使用する利点があるかどうかはわかりません。おそらく、ストリームを GZIPInputStream に通してデータを膨張させたいと思うでしょう。

GZIPInputStream gzipInput = new GZIPInputStream(yourInputStream);
DataInputStream dataInput = new DataInputStream(gzipInput);

ByteBuffer を使用すると、おそらく入力ストリームから読み取ったバイトをラップするだけで、利点はありません。

于 2010-07-24T21:20:51.430 に答える
-1

低レベルでプロトコルのすべてを記述する代わりに、Mina や Netty のようなライブラリを使用してみませんか? それらは、かなり簡単に実装できるソリューションを提供してくれます。

ミナhttp://mina.apache.org/

ネットhttp://www.jboss.org/netty

余談ですが、私たちは Red5 で Mina を使用しており、多くの実装者が何百万ものメッセージを処理しています。

于 2011-09-13T15:01:53.183 に答える