在Android中通过蓝牙发送字符串(字节)

时间:2017-01-14 18:40:27

标签: java android bluetooth

我实现了在两台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(流结束)。

我是对的吗?或者我应该实现自己的确定机制,是否收到所有发送的数据(或者我应该等待更多来完成当前的块)?

1 个答案:

答案 0 :(得分:0)

答案是:。传输将终止(以input.read表示),而不是传输整个发送的缓冲区。

必须保护传输,最好是在数据之前加上大小(以字节为单位),然后读取数据直到所有数据都被传输。