我实现了在两台Android设备之间通过Android在蓝牙中发送数据。为简单起见,我很可能会传递字符串并将其解析为JSON或其他字符串格式。
现在我想知道,我应该如何阅读数据以确保我已收到所有数据?目前我采用以下方法:
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个字节,则首先调用{{1将返回1024个字节,第二个 - -1(流结束)。
我是对的吗?或者我应该实现自己的确定机制,是否收到所有发送的数据(或者我应该等待更多来完成当前的块)?
答案 0 :(得分:0)
答案是:否。传输将终止(以input.read
表示),而不是传输整个发送的缓冲区。
必须保护传输,最好是在数据之前加上大小(以字节为单位),然后读取数据直到所有数据都被传输。