我正在开发一个android app来接收来自其他硬件设备的big file (大约400万)。该设备在1382400 bps中发送数据,但我的安卓程序只接收400K。数据读取代码位于一个独立的线程中,除了从InputStream读取和计数字节读取之外,什么也不做。这是我的代码片段:
try {
    socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
    socket.connect();
    InputStream is = socket.getInputStream();
    byte[] buf = new byte[1024];
    int byteRead ;
    while ((byteRead = is.read(buf)) > 0) {
        totalBytes += byteRead;
        Log.v(LOG_TAG, "read byte:" + totalBytes);
    }
} catch (IOExcepiton e) {
    Log.e(LOG_TAG, "Connect to bluetooth device failed.", e);
    return null;
}为了找出问题,我做了很多实验:
android 6.0到android 8.0),当发送者发送4M数据时,这些手机可以接收数据的400K ~ 500K。显然,90%的数据在传输过程中丢失。2K,android就能够完全接收。它在第一个2K数据包之后开始丢失数据。baudrate(1382400),但在每次1K传输后睡眠50ms,android也能够完全接收整个4M文件。4M文件从一部安卓手机传输到另一部安卓,它在不丢失数据的情况下使用30s。第4号表示android本机支持高速率传输(> 1Mbps),但我无法在自己的代码中实现。远程设备使用HC-06串行到bluetooth适配器,该适配器可以找到文档这里。该文档在空中显示适配器支持串行和1.3M的bluetooth bps速率。
我在stackoverflow和google中搜索了很多文章,没有关于android bluetooth传输速率和低级别buffer大小的进一步信息。
有人能给我一些关于如何在android中获得高转移率的建议吗?非常感谢。
发布于 2019-02-04 20:18:05
请考虑使用缓冲流。逐字节读取并将其打印到日志消息是太慢的方法。这样,就可以将字节读取的速度绑定到调试输出的速度上。
这个问题也可能与Android蓝牙串行RFCOMM低波特率/慢传输重复。
https://stackoverflow.com/questions/54438723
复制相似问题