我使用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字节,因为协议也可以提供不同大小的数据包。