Lea desde InputStream usando lectura contra IOUtils.copy

Estoy intentando utilizar 2 acercamientos para leer de InputStream vía el zócalo de Bluetooth.

El primero es:

 InputStream inputStream = bluetoothSocket.getInputStream(); byte[] buffer = new byte[1024]; inputStream.read(buffer); String clientString = new String(buffer, "UTF-8"); 

El problema con esto es que ahora en clientString hay el mensaje original más "0" hasta que el búfer esté lleno (puedo saber la longitud del mensaje si voy a usar los primeros bytes como indicadores, pero intento no hacerlo).

El segundo es (Utilizando la clase IOUtils de Apache Commons IO ):

 InputStream inputStream = bluetoothSocket.getInputStream(); StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, "UTF-8"); String clientString = writer.toString(); 

El problema con éste es que permanece en la línea de copy y nunca continúa más allá de este punto.

Entonces, mi pregunta es, ¿cuál es la diferencia entre esos enfoques y por qué obtengo resultados diferentes?

El código en el lado del cliente es (C # Usando 32feet ):

 client.Connect(BluetoothEndPoint(device.DeviceAddress, mUUID)); bluetoothStream = client.GetStream(); if (client.Connected == true && bluetoothStream != null) { byte[] msg = System.Text.Encoding.UTF8.GetBytes(buffer + "\n"); bluetoothStream.Write(msg, 0, msg.Length); bluetoothStream.Flush(); } 

Supongo que la clase IOUtils es de Apache Commons IO. Copia de inputStream a escritor hasta que llega al final de la secuencia (-1 se devuelve del método de lectura en secuencia). Su primer método sólo intenta leer el máximo de 1024 bytes y luego procede.

También el inputStream.read (buffer) devolverá el número de bytes leídos. Así que cuando creas tu String puedes usar eso:

 int read = inputStream.read(buffer); String clientString = new String(buffer, 0, read, "UTF-8") 

También debe comprobar si el método de lectura devuelve -1, lo que indica que se alcanza el final de la secuencia.

  • Android: getBluetoothService () llamado sin BluetoothManagerCallback
  • ¿Cómo obtener el estado del mensaje leído / no leído usando XMPP Smack API?
  • Aplicación de Android: permiso de SocketException denegado (ningún archivo o directorio de este tipo)
  • Cómo crear conexión Socket en Android?
  • Conectarse al conector Bluetooth de Android
  • Conexión Bluetooth de Android: falla en la detección del servicio
  • Android: socket bluetooth se niegan a conectarse correctamente
  • Android - Socket conectado aunque no pueda
  • No se puede establecer el valor DSCP en la aplicación android
  • Los sockets "localhost" de Android fallan cuando no hay conexión de datos?
  • Problema con el archivo de envío de Bluetooth de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.