android - android蓝牙RFCOMM数据传输速率太慢
问题描述
我正在开发一个从其他硬件设备android app
接收big file
(大约 4M)。设备发送数据1382400 bps
,但我的 android 程序只接收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;
}
我做了很多实验试图找出问题所在:
- 上面的代码运行在不同的安卓手机上(from
android 6.0
toandroid 8.0
),可以400K ~ 500K
在发送方发送数据时接收4M
数据。显然,90% 的数据在传输过程中会丢失。 - 如果发送方设备发送一个小文件,不超过
2K
相同的速率,android 能够完全接收。它在第一个数据包之后开始丢失数据2K
。 - 如果发送方保持不变,但每次传输后都
baudrate(1382400)
休眠,android 也能够完整接收整个文件。50ms
1K
4M
- 我
4M
使用安卓原生蓝牙共享功能将文件从一部安卓手机传输到另一部安卓,大约30s
不会丢失数据。
第 4 位表示 android 原生支持高速传输 (> 1Mbps
),但我无法在自己的代码中实现。远程设备使用HC-06
串口转bluetooth
适配器,文档可以在这里找到。该文档显示了适配器支持1.3M
串行和bluetooth
空中的 bps 速率。
我在 stackoverflow 和 google 中搜索了很多文章,没有关于 androidbluetooth
传输率和低级buffer
大小的更多信息。
谁能给我一些关于如何获得高传输率的建议android
?非常感谢。
解决方案
请考虑使用缓冲流。逐字节读取并将其打印到日志消息中太慢了。这样,您就可以将字节读取的速度与调试输出的速度绑定在一起。
这个问题也可能与 Android Bluetooth Serial RFCOMM low baud rate / slow transmission重复
推荐阅读
- r - 使用 plot_gg 制作 ggplot 3D 时遇到问题
- php - Laravel whereDoesntHave union whereHas
- java - 批量进行http调用
- arrays - 无法从 Node.js 服务器映射 JSON 对象数组,但局部变量在 React 中工作正常
- python-3.x - Publisher 类型的对象在 Django Multiple Pagination 中不是 JSON 可序列化的
- json - 提交后的 Ajax 格式 - Laravel
- c# - ASP.NET Core 自定义登录设置
- kubernetes - APISERVER 日志中的 TLS 握手错误来自哪里?
- python - 如何使 tkinter 中的返回值延迟 2 秒。?
- reactjs - 不能将主题传递给子组件 Material-Ui - React?