Kotlin readBytes () никогда не завершает

Я только пытаюсь писать и читать через Bluetooth Socket, но мой вызов readBytes не завершается. Я думаю, что это очень просто, но, возможно, я просто использую неправильный тип потока или что-то в этом роде. На данный момент мой код просто отправляет небольшое количество текста в виде байтов. Это код заполнителя, который будет заменен кодом, который записывает и считывает файл по потоку. Вот моя тема получения:

class ReceiveThread(val inStream:BufferedInputStream):Thread() { var bytes:ByteArray? = null override fun run() { BluetoothService.log("Begin ${BTS_Constants.THREAD_RECEIVE}") BluetoothService.log("preparing to read data") name = BTS_Constants.THREAD_RECEIVE //here is my new code inStream.use { do{ count++ BluetoothService.log("read loop round $count") byteList.add(it.read() as Byte) }while (it.available()>0) } BluetoothService.log("data read: ${byteList.get(0) as Char}") } } 

и вот моя Отправить тему:

 class SendThread(val outStream:BufferedOutputStream, val file:File? = null):Thread(){ var bytes:ByteArray? = null override fun run() { BluetoothService.log("Begin : ${BTS_Constants.THREAD_SEND}") name = BTS_Constants.THREAD_SEND bytes = "hello testing".toByteArray() try{ outStream.use { it.write(bytes) it.flush() } }catch (ioe:IOException){ } BluetoothService.log("data sent") } } 

данные успешно отправлены, а вызов BluetoothService.log("data sent") достигнут и отображается в логарифме для устройства, на котором запущен поток передачи. Для устройства, на котором запущены журналы приема, сообщение «Подготовка к чтению данных», но никогда не записывает data read: "$bytes message" .

Как я могу сделать этот вызов inStream.readBytes () завершенным?

Изменить: новое сообщение об ошибке, которое я получаю:

 11-27 23:45:29.298 16253-16413/com.example.zemcd.fileblue E/AndroidRuntime: FATAL EXCEPTION: RECEIVE Process: com.example.zemcd.fileblue, PID: 16253 java.io.IOException: bt socket closed, read return: -1 at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:588) at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96) at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) at java.io.BufferedInputStream.read(BufferedInputStream.java:254) at com.example.zemcd.fileblue.ReceiveThread.run(BluetoothService.kt:230) 

Если вы посмотрите на источник функции расширения Kotlin readBytes вы увидите, что он запускает цикл, пока InputStream.read(buffer) > 0 . Согласно документации :

Этот метод блокируется до тех пор, пока не будут доступны входные данные, обнаружен конец файла или не будет выбрано исключение.

Вторая итерация этого цикла заморозит вашу программу. Поэтому не используйте метод readBytes . Просто read(buffer) . Например: https://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection

Обновить:

Теперь ReceiveThread может получать одно сообщение из потока. Но ваш разъем Bluetooth близок. Поэтому ваша проблема заключается в настройке соединения Bluetooth и инициализации inStream . Возможно, у вас тоже есть неправильная отправка.