当前位置: 首页 > 知识库问答 >
问题:

从InputStream读取传感器数据

麹渊
2023-03-14

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

04 64 E2 FF 4904 64 E3 FF 4A04 64 E1 FF 48

因此,在本例中,04是新数据帧的开始。(04描述了即将出现的字节数)

我读取数据流使用InputStream对象。如何将流读入缓冲区以随后解码字节?问题是读取(缓冲区,偏移量,长度)不能保证读取长度的字节量。有时它小于长度。我认为逐个字节地读取数据是低效的。从输入流读取解码数据的常见方法是什么?

亲切的问候


共有1个答案

佴普松
2023-03-14

一种常见的方法是创建一个小型实用程序方法,确保它读取您要求它读取的字节数:

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;
    }
}

您可能可以在ApacheCommons io库中找到类似的内容。

 类似资料:
  • 如有任何建议将不胜感激。

  • 本文向大家介绍unity3d 读取加速度传感器(精度),包括了unity3d 读取加速度传感器(精度)的使用技巧和注意事项,需要的朋友参考一下 示例 仔细阅读加速度传感器。 本示例分配内存: 这个例子确实没有分配内存: 请注意,这未过滤。请在此处查看如何平滑加速度计值以消除噪声。

  • 问题内容: 在 Android平台上从InputStream读取时,我遇到一个奇怪的问题。我不确定这是否是Android特有的问题,或者 总体上我做错了什么。 唯一特定于Android的是此调用: 这会从Android资产返回文件的InputStream。无论如何, 这是我遇到的问题: 当read()执行时,它抛出IOException。奇怪的是, 如果我进行了两个连续的单字节读取(或任意数量的单

  • 问题内容: 我正在尝试编写一个读取HTTP请求和响应并对其进行解析的类。由于标题是普通文本,因此似乎最容易使用 BufferedReader 和 readLine 方法读取它们。这显然不会对数据主体起作用,因为它可能是二进制的,所以我想在读取头之后切换到读取原始字节。 现在,我正在做这样的事情: 问题是 BufferedReader 正在提前读取并吞噬流中的所有二进制数据,然后才有机会使用Bins

  • 我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到

  • 问题内容: 我已经创建了可执行的jar文件(使用Eclipse),在jar中包含一组图像(.png)文件。所以我添加了一个源文件夹,其中所有图像都位于项目的文件夹中。代码必须访问这些文件才能使用创建BufferedImage 较早前,为了获得我使用的路径 在执行jar时,它抛出错误 URI不是分层的 所以现在我正在使用 但是如何使ImageIO从Inputstream读取?我试过如下 抛出错误 I