Вам придется разобраться с этим самим при разработке протокола приложения.
Предполагая, что вы используете Android BluetoothSocket
с RFCOMM, Javadoc говорит следующее:
RFCOMM - это ориентированный на соединение потоковый транспорт по Bluetooth.
и
Интерфейс для сокетов Bluetooth аналогичен интерфейсу сокетов TCP:
Хотя это не совсем понятно из этих цитат, подразумевается, что потоки будут вести себя как потоки TCP, а это означает, что в байтах, доставляемых методами read
, нет надежно различимых границ сообщений / пакетов / записей. , Если отправитель решает отправить два сообщения вплотную, то получатель обязан получить конец одного сообщения и начало следующего в буфере чтения.
Итак ... если у вас есть протокол приложения, ориентированный на сообщения / пакеты, работающий через сокет, вы должны спроектировать протокол приложения так, чтобы границы сообщений были различимы получателем независимо от того, как мало / много байтов проходит через время. Другими словами, вам нужно использовать количество байтов пакетов, маркеры конца пакета или что-то подобное в вашем протоколе, чтобы получатель мог выяснить, где заканчивается каждый пакет и начинается следующий.