1

我正在读取传递给我的字节数组(不是我的选择,但我必须以这种方式使用它)。我需要将数据获取到 LinkedBlockingQueue,并最终通过字节构建一个或多个(可能包含部分消息)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 数组是对象,因此 anyBlockingQueue<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 回答