我目前正在通过蓝牙发送大量包含两个设备之间数据的单独字符串,但由于某种原因,传输类似字符串需要不规则的时间。下面是两个相似字符串的写入时间示例:
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));
}
是否有可能是因为我正在执行单独的写入而不是一次大的统一写入会大大减慢它的速度?
答案 0 :(得分:1)
从个人经验来看,延迟(数据从一台设备传输到另一台设备所需的时间)在写入之间可能会有很大差异,也取决于所使用的Android设备(或Android操作系统)。请记住,有一些OS框架代码必须处理您的数据写入,然后有蓝牙堆栈本身,所有这些都需要CPU时间来处理。它也可能部分归结为蓝牙协议的成帧,因为数据是通过数据包在空中发送的。
如果您的特定示例显示在第一个之后立即执行第二次写入,则第二种情况下的较长时间可能是由于底层本机write()调用阻塞一段时间,因为底层操作系统仍在处理第一个缓冲区
我认为你希望对此有最好的答案就是接受这种延迟,并设计你的应用程序以应对它。如果进行更大的写入,可能会获得更好的吞吐量。
答案 1 :(得分:0)