Kotlin readBytes () nunca termina

Solo estoy tratando de escribir y leer a través de un Socket Bluetooth pero mi llamada a readBytes no se está completando. Creo que esto es muy simple, pero tal vez solo estoy usando el tipo de transmisión incorrecto o algo así. A partir de ahora mi código solo está enviando una pequeña cantidad de text como bytes. Este es un código de marcador de position que se replaceá con un código que escribe y lee un file sobre la transmisión. Aquí está mi hilo de recepción:

class ReceiveThread(val inStream:BuffenetworkingInputStream):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}") } } 

y aquí está mi hilo de envío:

 class SendThread(val outStream:BuffenetworkingOutputStream, 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") } } 

los datos se envían correctamente y la llamada BluetoothService.log("data sent") se alcanza y se muestra en el logcat para el dispositivo que ejecuta un envío de subprocesss. Para el dispositivo que ejecuta Receive Thread registra el post "Preparando para leer datos", pero nunca registra los data read: "$bytes message" .

¿Cómo puedo completar esta llamada a inStream.readBytes ()?

Editar: nuevo post de error que estoy recibiendo:

 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.BuffenetworkingInputStream.fill(BuffenetworkingInputStream.java:235) at java.io.BuffenetworkingInputStream.read(BuffenetworkingInputStream.java:254) at com.example.zemcd.fileblue.ReceiveThread.run(BluetoothService.kt:230) 

Si observa la fuente de la function de extensión de Kotlin readBytes , verá que comienza el ciclo mientras InputStream.read(buffer) > 0 . De acuerdo con la documentation :

Este método bloquea hasta que los datos de input estén disponibles, se haya detectado el final del file o se haya lanzado una exception.

La segunda iteración de este ciclo congela su progtwig. Entonces no use el método readBytes . Simplemente read(buffer) . Por ejemplo, https://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection

Actualizar:

Ahora ReceiveThread puede recibir un post de la transmisión. Pero tu socket bluetooth está cerca. Por lo tanto, su problema está en la configuration de la connection bluetooth y la initialization de inStream . Tal vez tienes una parte de envío incorrecta también.