Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中通过蓝牙发送字符串(字节)_Java_Android_Bluetooth - Fatal编程技术网

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

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;

我正在实现通过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字节,则对
read
的第一次调用将返回1024字节,第二次--1(流结束)


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

答案是:。传输可能会结束(就
输入.读取而言),而不是传输整个发送缓冲区

人们必须保护传输,最好是在数据前面加上字节大小,然后读取数据,直到所有数据都被传输