Java Android中通过蓝牙发送字符串(字节)
我正在实现通过Android中的蓝牙在两台Android设备之间发送数据。为简单起见,我很可能会传递字符串并将其解析为JSON或其他字符串格式 现在我想知道,我应该如何读取数据以确保我已经收到所有数据?目前我采取以下方法:Java Android中通过蓝牙发送字符串(字节),java,android,bluetooth,Java,Android,Bluetooth,我正在实现通过Android中的蓝牙在两台Android设备之间发送数据。为简单起见,我很可能会传递字符串并将其解析为JSON或其他字符串格式 现在我想知道,我应该如何读取数据以确保我已经收到所有数据?目前我采取以下方法: byte[] buffer = new byte[1024]; while (!finished) { // My class MemoryStream ms = new MemoryStream(); int bytesRead = 0;
byte[] buffer = new byte[1024];
while (!finished) {
// My class
MemoryStream ms = new MemoryStream();
int bytesRead = 0;
do {
bytesRead = input.read(buffer, 0, buffer.length);
ms.write(buffer, 0, bytesRead);
} while (bytesRead == buffer.length);
// Now process data
}
但是,只有当inputStream.read()
返回的字节数始终与在另一个设备上发送的字节数相同时,这才有效
例如,我假设,如果第一个设备发送1234个字节,那么对read
的第一个调用将返回1024个字节,第二个将返回210个字节。或者,如果第一个设备发送1024字节,则对read
的第一次调用将返回1024字节,第二次--1(流结束)
我说得对吗?或者我应该实现自己的机制来确定是否接收了所有发送的数据(或者我应该等待更多数据来完成当前数据块)?答案是:否。传输可能会结束(就
输入.读取而言),而不是传输整个发送缓冲区
人们必须保护传输,最好是在数据前面加上字节大小,然后读取数据,直到所有数据都被传输