Я разрабатываю android app
для получения big file
(около 4М) от другого аппаратного устройства.Устройство отправляет данные в 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;
}
Я провел много экспериментов, пытаясь выяснить проблему:
- Приведенный выше код работает на разных телефонах Android (с
android 6.0
to android 8.0
), который может получать 400K ~ 500K
данных, когда отправитель отправляет 4M
данные.Очевидно, что во время передачи теряется 90% данных. - Если устройство-отправитель отправляет небольшой файл, не более
2K
с той же скоростью, Android может получить полностью.Он начинает терять данные после первого 2K
пакета. - Если отправитель сохраняет тот же
baudrate(1382400)
, но спит 50ms
после каждой 1K
передачи, android также может получить весь *Файл 1025 * полностью. - Я передаю файл
4M
с одного телефона Android на другой Android с помощью функции общего доступа по Bluetooth для Android, он занимает около 30s
без потери данных.
№ 4 указывает, что Android изначально поддерживает высокоскоростную передачу (> 1Mbps
), но я не могу реализовать в своем собственном коде.Удаленное устройство использует адаптер HC-06
serial к bluetooth
, документ которого можно найти здесь .Документ показывает, что адаптер поддерживает скорость 1.3M
бит / с в серийном режиме и bluetooth
в эфире.
Я искал много статей в stackoverflow и google, больше никакой информации об андроиде bluetooth
скорость передачи и низкий уровень buffer
размер.
Может кто-нибудь дать мне несколько советов о том, как получитьвысокая скорость передачи в android
?Большое спасибо.