Отправка строк (байт) через Bluetooth в Android

Я реализую передачу данных через Bluetooth в Android между двумя устройствами Android. Для простоты я, скорее всего, передам строки и проанализирую их как JSON или другой формат строки.

Теперь мне интересно, как я должен читать данные, чтобы быть уверенным, что я получил все из них? В настоящее время я использую следующий подход:

byte[] buffer = new byte[1024];

while (!finished) {

    // My class
    MemoryStream ms = new MemoryStream();

    int bytesRead = 0;
    do {
        bytesRead = input.read(buffer, 0, buffer.length);
        ms.write(buffer, 0, bytesRead);
    } while (bytesRead == buffer.length);

    // Now process data
}

Однако это будет работать только в том случае, если inputStream.read()всегда будет возвращать столько байтов, сколько было отправлено на другом устройстве.

Например, я предполагаю, что если первое устройство отправляет 1234 байта, первый вызов readвернет 1024 и второй 210. Или если первое устройство отправляет 1024 байта, первый вызов readвернет 1024 байта, а второй -1 (конец потока).

Я прав? Или я должен реализовать свой собственный механизм определения, все ли отправленные данные были получены (или я должен ждать больше, чтобы завершить текущий кусок)?

1 ответ

  1. Ответ: нет . Возможно, что передача закончится (в терминахinput.read) и не весь переданный буфер будет передан.

    Необходимо следить за передачей, предпочтительно предваряя данные их размером в байтах, а затем считывать данные, пока все они не будут переданы.