Lotes de array byte Android

Estoy enviando la imagen a través de Bluetooth pro-gramaticalmente. Cuando envío la imagen como matriz del byte en el lado que envía la longitud del arsenal del byte es = 83402 y en el lado receptor estoy consiguiendo los bactes del byte de 1024.

Quiero combinar estos 1024 lotes en una sola matriz de bytes para que vuelva a convertirlo como una imagen.

Aquí en el msg.obj i obtener 1024 bacth de matriz de bytes.

Case MESSAGE_READ:

byte[] readBuf = (byte[]) msg.obj; Bitmap bmp=BitmapFactory.decodeByteArray(readBuf,0,readBuf.length); 

Después de que también estoy recibiendo esta advertencia ..

"Tamaño del búfer predeterminado utilizado en el constructor BufferedOutputStream. Sería mejor ser explícito si se requiere un búfer de 8 k"

Cualquier ayuda sería apreciada.

Gracias

Debe ser más o menos algo como esto:

 byte[] readBuf = new byte[83402]; // this array will hold the bytes for the image, this value better be not hardcoded in your code int start = 0; while(/*read 1024 byte packets...*/) { readBuf.copyOfRange((byte[]) msg.obj, start, start + 1024); // copy received 1024 bytes start += 1024; //increment so that we don't overwrite previous bytes } /*After everything is read...*/ Bitmap bmp=BitmapFactory.decodeByteArray(readBuf,0,readBuf.length); 

Voy a salir en una extremidad aquí y asumir que está utilizando el ejemplo de BluetoothChat de la sdk para construir su imagen remitente (todos sus ejemplos coinciden con él). Aquí está una conversión rápida que lanzé junto – puede no ser el mejor pero trabaja.

Los está recibiendo en lotes de 1024 porque en la función de ejecución de BluetoothChatService.java crea un tamaño de matriz de búfer 1024 que va y obtiene información de la secuencia de entrada. Si crea otro búfer que se ajuste a la imagen allí (he establecido un máximo de 1 MB), entonces su función de ejecución tendría:

 byte[] buffer = new byte[1024]; byte[] imgBuffer = new byte[1024*1024]; int pos = 0; 

Con su variable de posición manteniendo un seguimiento de dónde se encuentra en su imgBuffer.

Entonces usted acaba de copiarlo mientras que usted está consiguiendo pedazos en el lazo del tiempo (verdadero) de la imagen como esto (mmInStream es un InputStream):

 int bytes = mmInStream.read(buffer); System.arraycopy(buffer,0,imgBuffer,pos,bytes); pos += bytes; 

Envío un mensaje para hacerle saber que la imagen se hace enviando y en ese punto lanzar el imgBuff encima al otro hilo de rosca (pos tiene el tamaño del imgBuffer en este punto):

 mHandler.obtainMessage(BluetoothChat.IMAGE_READ, pos, -1, imgBuffer) .sendToTarget(); 

Había definido IMAGE_READ para decodificar la matriz como lo hiciste en tu MESSAGE_READ:

 byte[] readBuf = (byte[]) msg.obj; BitmapFactory.decodeByteArray(readBuf, 0, msg.arg1); 
  • Por qué funciónMillis () devuelve -1 en java
  • Android webview + javascript no mostrar la salida en android 4.0.x, 3.x
  • La fusión de clips mp4 con mp4parser hace que el audio detrás del video
  • Android: Llamar a Python Script (a través de SL4A) desde código Java
  • Android Studio 2.1 Error al convertir bytecode a dex
  • Calendario de Android Java getDisplayName / s devolver null
  • Google google maps agrega al marcador propia etiqueta
  • ¿Por qué RecyclerView onBindViewHolder se llama una sola vez?
  • Google API para Google Docs, solicitando una lista de documentos - 400 Solicitud incorrecta
  • ¿Qué es una NullPointerException y cómo puedo solucionarlo?
  • ¿Cómo hace la interfaz ReadableMap en React-native convertir JS a JAVA?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.