分割数据,从Java InputStream读取

时间:2015-03-31 10:21:26

标签: java android sockets bluetooth inputstream

我使用InputStream Java类来管理来自蓝牙RFCOMM频道的传入数据,使用Android设备。

我在Thread中使用以下代码,始终监听传入数据:

byte[] buffer = new byte[512];

while (true) {
    try {
        bytes = mmInStream.read(buffer);

        byte[] payload = Arrays.copyOfRange(buffer, 0, bytes);
        Packet p = new Packet(payload);

        managePacket(p); 

    } catch (IOException e) {
        break;
    }
}

从远程设备接收的每个数据包以254字节大小的块组织。所以我真正读到的是:

SEND PACKET 1 -> received 254 bytes (OK)
SEND PACKET 2 -> received 254 bytes (OK)
SEND PACKET 3 -> received 254 bytes (OK)
SEND PACKET 4 -> received 254 bytes (OK)
SEND PACKET 5 -> received   8 bytes (ERROR)
              -> received 246 bytes (ERROR)

因此前四个数据包被正常读取,但第五个数据包il被分成两个不同的读取(8个字节+ 246个字节)。

似乎在流读取1024字节(254 + 254 + 254 + 254 + 8 = 1024)之后,它需要停止读取并重新启动新的读取。

注意:在处理数据包之前我不能等待接收254字节,因为协议也可以提供不同大小的数据包。

0 个答案:

没有答案