在我的应用程序中,我通过蓝牙接收传感器数据,我希望以有效的方式阅读它。 数据流如下所示:
04 64 E2 FF 49
04 64 E3 FF 4A
04 64 E1 FF 48
...
...
因此,在这种情况下,04
是新数据框的开头。 (04
描述了即将到来的字节数)
我使用InputStream对象读取数据流。
如何将流读入缓冲区以便在之后解码字节?
问题是read(buffer,offset,length)
无法保证读取length
个字节数。有时候它会低于length
。我认为读取数据字节的字节是低效的。
从输入流中读取解码数据的常用方法是什么?
亲切的问候
答案 0 :(得分:0)
一种常见的方法是创建一个小实用程序方法,保证它读取您要求它读取的字节数:
public static void readFully(InputStream in, byte[] buffer, int offset, int length) throws IOException {
int total = 0;
while (total < length) {
int r = in.read(buffer, offset + total, length - total);
if (r < 0)
throw new EOFException();
total += r;
}
}
您可能会在 apache-commons-io 库中找到类似的内容。