1

渡されたバイトの配列を読み取っています(私の選択ではありませんが、この方法で使用する必要があります)。LinkedBlockingQueueにデータを取得し、最終的にバイトをステップスルーして、1つ以上の(部分的なメッセージを含む可能性がある)xmlメッセージを作成する必要があります。だから私の質問はこれです:

LBQタイプにはどのジェネリックを使用する必要がありますか?byte []をそのジェネリック型にする最も効率的な方法は何ですか?

これが私のサンプルコードです:

parsebytes(byte[] bytes, int length)
{
    //assume that i am doing other checks on data

    if (length > 0)
    {
        myThread.putBytes(bytes, length);
    }
}

私のスレッドで:

putBytes(byte[] bytes, int length)
{
    for (int i = 0; i < length; i++)
    { 
        blockingQueue.put(bytes[i]);
    }
}

また、ブロッキングキューをバイトごとに削除する必要もありません。私はむしろキューにあるすべてのものをつかんでそれを処理したいと思います。

4

2 に答える 2

4

のようなものはありませんListBlockingQueue。ただし、Java配列はオブジェクトであるため、いずれBlockingQueue<Object>も受け入れます。byte[]

他の設計上の考慮事項がない場合、最も簡単なオプションは、配列が到着したときに配列をキューに固定し、コンシューマーにそれらをつなぎ合わせさせることです。

于 2012-11-20T15:35:34.087 に答える
4

このことを考慮:

    BlockingQueue<byte[]> q = new LinkedBlockingQueue<>();
    q.put(new byte[] {1,2,3});
    byte[] bytes = q.take();
于 2012-11-20T17:27:12.853 に答える