基本的に、私の状況はこれです:
- サーバーは、クライアント接続からinQueue
ByteBuffer
というオブジェクトにデータをストリーミングします。これには、最新のデータストリームが含まれます - サーバーは、これらの各ストリームのデータを処理し、特定の形式のデータのパケットを期待する必要があります
byte[]
データのペイロードはオブジェクトに読み込まれ、個別に処理されます
さて、私の質問はこれに要約されます: 残りのバッファデータ(ペイロード)をbyte[]
配列にコピーすることはパフォーマンスに悪いですか?
外観は次のとおりです。
// pretend we're reading the packet ID and length
// int len = LENGTH OF PACKET PAYLOAD
/*
* Mark the starting position of the packet's payload.
*/
int pos = inQueue.position();
byte[] payload = new byte[len];
inQueue.get(payload);
// Process the packet's payload here
/*
* Set the inQueue buffer to the length added to the previous position
* so as to move onto the next packet to process.
*/
inQueue.position(pos + len);
ご覧のとおり、私は基本的にこれを行っています。
- ペイロードの直前のバッファ全体の位置をマークします
byte[]
ペイロードが別のオブジェクトに送られる限り、inQueueの内容をコピーします- より多くのパケットを読み取ることができるように、完全なバッファの位置を、読み取ったばかりのペイロードの後に設定します
私の懸念は、これを行う際に、バッファをコピーすることによってメモリを浪費していることです。使用されるパケットは500バイトを超えることはなく、多くの場合100バイト未満であることに注意してください。
私の懸念は有効ですか、それとも私はパフォーマンスに偏っていますか?:p