从InputStream读取传感器数据

时间:2014-09-16 13:58:09

标签: java stream inputstream

在我的应用程序中,我通过蓝牙接收传感器数据,我希望以有效的方式阅读它。 数据流如下所示:

04 64 E2 FF 49 04 64 E3 FF 4A 04 64 E1 FF 48 ... ...

因此,在这种情况下,04是新数据框的开头。 (04描述了即将到来的字节数)

我使用InputStream对象读取数据流。 如何将流读入缓冲区以便在之后解码字节? 问题是read(buffer,offset,length)无法保证读取length个字节数。有时候它会低于length。我认为读取数据字节的字节是低效的。 从输入流中读取解码数据的常用方法是什么?

亲切的问候

1 个答案:

答案 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 库中找到类似的内容。