2011-01-26 8 views
2

ByteBuffer(java.nio)は、バッファークラスよりも効率的(?)でデータを読み込むために使用する必要があります。私の質問は、マルチキャストアドレスからパケットを読み取り、それらをプリミティブオブジェクトに処理するUDPクライアントを中心にしています。 DatagramSocketからこれらのパケットを解析する最も効率的な/最速の方法は何ですか?今、私はByteBufferをラップし、そこから読むバイト配列のデータグラムパケットを持っています。私の目標は、新しいオブジェクトの作成を最小限に抑え、スピードを最大化することです。ByteBufferとデータグラムパケットのバッファー

+5

私はこの質問がより適していると思います[stackoverflow.com](http://stackoverflow.com)。 –

答えて

3

DatagramSocketByteBufferに直接読み込むことはできませんが、代わりにDatagramChannelを使用してください。

+0

DatagramSocket _can_ ByteBufferに直接受け取ることができます(ゼロクロスを意味する場合は「直接」)。 ByteBufferをラップするDatagramPacketを作成します。受信()し、ByteBufferからデータを読み取ることができます。パケット構造とsend()と同じです。 – charstar

+0

@charstar、私はそれが正しいとは思わない。 'DatagramPacket'コンストラクタはすべて' ByteBuffer'ではなく 'byte []'をとります。バッファーのバッキング配列を取ることができます。バッファーのバッキング配列がある場合にのみ使用でき、*直接*バイトバッファーにはバッファーがありません。 – finnw

0

ByteBufferは、効率性からではなく、プログラマの視点から効率的なアクセスを実現するための十分な機能がバッファにないという理由だけで使用されると思います。私は、基礎となるコードがほとんど重複しているので、効率に違いがあるとは思わない。

どちらかが単純なバイト配列を使用するよりも効率的かどうかは、必ずしも明確ではないことに注意してください.NIOのパフォーマンスは誤認しやすいです。

関連する問題