我正在读取传递给我的字节数组(不是我的选择,但我必须这样使用它)。我需要将数据传递给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]);
}
}
我也不想一个字节地逐个拉出阻塞队列。我宁愿抓住队列中的所有内容并进行处理。
答案 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数组是对象。
在没有其他设计考虑因素的情况下,最简单的选择可能是在阵列到达时将阵列粘在队列中,让消费者将它们放在一起。