Enviar flujo de imágenes a través de un problema Socket – Android

He implementado una aplicación que toma una foto con la cámara SP y la envía a través de un socket al servidor.

Estoy usando el siguiente código para leer el archivo de imagen almacenado localmente y enviarlo en trozos sucesivos a través del socket:

FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" ); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[16384]; try { while( (nRead = fileInputStream.read(data, 0, data.length)) != -1 ){ buffer.write(data, 0, nRead); networkOutputStream.write( buffer.toByteArray() ); buffer.flush(); } } catch( IOException e ){ e.printStackTrace(); } 

El problema al que me enfrento es que cambiar el tamaño de la matriz de data[] de bytes data[] afecta la cantidad de imagen que se envía realmente al servidor .

Las imágenes publicadas a continuación te ayudarán a entender:

  • byte[] data = new byte[16384];

introduzca la descripción de la imagen aquí

  • byte[] data = new byte[32768];

introduzca la descripción de la imagen aquí

  • byte[] data = new byte[65536];

introduzca la descripción de la imagen aquí

Y así.

Como puede imaginar, puedo encontrar un tamaño que me permita enviar la imagen completa, pero esa solución ad hoc no es aceptable, ya que podría ser necesario enviar imágenes de cualquier dimensión.

En mi opinión, parece que hay un problema en la forma en que estoy leyendo el archivo de imagen de forma amortiguada, ¿me pueden ayudar?

¡Gracias por adelantado!

El uso de ByteArrayOutputStream es redundante, y usted está enviando todo su contenido cada vez que crece. Cambie su bucle de la siguiente manera:

 FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" ); int nRead; byte[] data = new byte[16384]; try { while( (nRead = fileInputStream.read(data)) != -1 ){ networkOutputStream.write( data, 0, nRead ); } } catch( IOException e ){ e.printStackTrace(); } fileInputStream.close();