1

我目前正在通过蓝牙发送许多包含两个设备之间数据的单独字符串,但是由于某种原因,传输类似字符串需要不规则的时间。下面是两个相似字符串的写入时间示例:

String: K:92:281:-50529028
Write time: 2
String: K:93:281:-50529028
Write time: 41

测量的时间以毫秒为单位。这是我的写函数,我使用 BufferedOutputStream 来传输数据:

public synchronized void write(byte[] bytes) {
    long writeTime = System.currentTimeMillis();
    try {
        mmOutStream.write(bytes,0,bytes.length);
        mmOutStream.write('\n');
        mmOutStream.flush();
    }catch(IOException e) {
        Log.e(TAG,"Write IOException");
        cancel();}
    String s = new String(bytes);
    Log.d(TAG,"String: " + s);
    Log.d(TAG,"Write time: " + (System.currentTimeMillis() - writeTime));
}

是否有可能是因为我正在执行单独的写入而不是一个大型的统一写入,所以它大大减慢了速度?

4

2 回答 2

1

根据个人经验,写入之间的延迟(数据从一台设备传输到另一台设备所需的时间)可能会有很大差异,并且还取决于所使用的 Android 设备(或 Android 操作系统)。请记住,有一些操作系统框架代码必须处理您的数据写入,然后是蓝牙堆栈本身,所有这些都需要 CPU 时间来处理。它也可能部分归结为蓝牙协议的框架,因为数据是以数据包的形式通过空中发送的。

如果您的特定示例显示在第一次之后立即执行第二次写入,则第二种情况下的较长时间可能是由于底层本机 write() 调用阻塞了一段时间,因为底层操作系统仍在处理第一个缓冲区。

我认为您希望对此的最佳答案是接受这种延迟的存在,并设计您的应用程序来应对它。如果您进行更大的写入,您可能会获得更好的吞吐量。

于 2013-10-28T13:59:51.997 回答
0

IMO,传输类似字符串的时间如此巨大的差异必须是由于无线上发生的冲突。看不到您将如何避免它们,因为它是共享频段上的任何无线通信所固有的。

于 2013-10-28T15:29:16.570 回答