【发布时间】:2012-11-08 17:10:29
【问题描述】:
我正在读取传递给我的字节数组(不是我的选择,但我必须以这种方式使用它)。我需要将数据获取到 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]);
}
}
我也不想一个字节一个字节地退出阻塞队列。我宁愿抓取队列中的所有内容并进行处理。
【问题讨论】:
-
使用 Byte 类型并让 java 为您自动转换是否存在问题(不确定性能效率,但这可能是最简单的代码行)。
-
您有
byte[]或ByteArrayInputStream 之类的吗?当您获得更多数据时,给您byte[]的东西是否会继续更新它?如果这些问题的答案是否定的,为什么需要队列阻塞? -
函数参数为byte[]。基本上我需要尽快退出该功能,因此我将数据拉出并使用 LBQ 上的 put/take 在另一个线程中处理它。我目前将 LBQ 作为一个字节,但是必须循环输入一个字节一个字节似乎很浪费。