Как правильно передавать данные через Bluetooth на Android

Я занимаюсь разработкой приложения, которое считывает данные из DAQ, который передает свои данные по Bluetooth. Размеры пакетов могут меняться, как и частота дискретизации (1 Гц – 512 Гц), и я могу прокручивать и считывать данные с устройства с помощью буфера.

Мой вопрос в том, как правильно обрабатывать данные, когда есть такая переменная размера пакета и частоты дискретизации? Как определить размер буфера?

В настоящее время я просто открываю сокет, открывая входной поток, а затем использую цикл while (в то время как сокет открыт == true) для чтения из потока и обрабатывает данные (простое декодирование, а не посторонняя задача).

Например, в пакете имеется 23 байта, и у меня частота дискретизации очень низкая в данный момент на частоте 1 Гц. У меня есть буфер размером 256 байт, что означает, что он не будет размещать полный пакет в конце буфера, и я написал код для его перехода в следующий буфер. Как только данные считываются, хватайте один пакет из буфера, декодируйте и храните его, делайте следующий и т. Д.

Как я должен быть потоковым и правильно управлять данными? В конце концов, я поймаю что-то в области из 44 пакетов на 512 Гц, прямо на пределе передачи Bluetooth, и я хочу, чтобы иметь возможность обрабатывать его как можно эффективнее, и отображать ошибки при падении пакета в процессе и т. Д.

TL; DR: как правильно передавать данные с использованием буферов и / или прерываний.