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

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));
}


是否有可能因为我正在执行单独的写操作而不是一次大的统一写操作而使它大大减慢了速度?

最佳答案

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

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

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

关于java - 蓝牙传输速度不正常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19635858/

10-15 00:37