2017-01-14 117 views
0

我正在实施通过两个Android设备之间的蓝牙在Android中发送数据。为了简单起见,我将主要传递字符串并将它们解析为JSON或其他字符串格式。在Android中通过蓝牙发送字符串(字节)

现在我想知道,我应该如何读取数据以确保我已收到所有这些数据?目前,我采取以下做法:

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(流结束)。

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

回答

0

答案是:。传输可能会结束(根据input.read),而不是整个发送的缓冲区被传送。

人们必须防范传输,最好是以数据的大小以字节为单位,然后读取数据直到所有数据都被传输。

相关问题