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); 
  • GoogleApiClient no está conectado aún.
  • Cómo cerrar / cerrar los diálogos de mensajes de la clase 0 en Android
  • La sección criticial de Java no parece funcionar
  • ¿Por qué AIDL / Messenger está enlazado a un Servicio?
  • Android: Cómo comprobar si el número SMS entrante existe en el teléfono de contacto en BroadcastReceiver y el bloque es el número no existe
  • Androide. Iniciar aplicación desde Dialer
  • Superponiendo un lienzo en la parte superior de una vista de superficie, Flashes
  • Diferenciación de los lenguajes CJK (chino, japonés y coreano) en Android
  • Pasar ArrayList de objetos a través de la intención - Java (Android)
  • ¿Hay algún motor de juego 2D mejor que Libgdx?
  • Diferentes resultados de expresión regular en Java SE y plataforma Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.