获取byte []到队列(ListBlockingQueue)的最有效方法

时间:2012-11-20 15:29:40

标签: java queue bytearray

我正在读取传递给我的字节数组(不是我的选择,但我必须这样使用它)。我需要将数据传递给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]);
    }
}

我也不想一个字节地逐个拉出阻塞队列。我宁愿抓住队列中的所有内容并进行处理。

2 个答案:

答案 0 :(得分:4)

考虑一下:

    BlockingQueue<byte[]> q = new LinkedBlockingQueue<>();
    q.put(new byte[] {1,2,3});
    byte[] bytes = q.take();

答案 1 :(得分:3)

没有ListBlockingQueue这样的东西。但是,任何BlockingQueue<Object>都将接受byte[],因为Java数组是对象。

在没有其他设计考虑因素的情况下,最简单的选择可能是在阵列到达时将阵列粘在队列中,让消费者将它们放在一起。

相关问题