generic java arrays byte boxing

java - generic - ¿Cómo convertir el byte[] a Byte[], y al revés?



generic java (6)

¿Cómo convertir un byte [] a un byte [], y también un byte [] a un byte [], en el caso de no utilizar ninguna biblioteca de terceros? ¿Hay una manera de hacerlo rápido usando la biblioteca estándar?


De byte [] a Byte []:

byte[] b = new byte[]{1,2}; Byte[] B = new Byte[b.length]; for (int i = 0; i < b.length; i++) { B[i] = Byte.valueOf(b[i]); }

De Byte [] a byte [] (usando nuestra B previamente definida):

byte[] b2 = new byte[B.length]; for (int i = 0; i < B.length; i++) { b2[i] = B[i]; }


Podría usar el método toPrimitive en la clase ArrayUtils de la biblioteca lang de Apache Commons, como se sugiere aquí: Java - Byte [] a byte []


Solución de Java 8:

Byte[] toObjects(byte[] bytesPrim) { Byte[] bytes = new Byte[bytesPrim.length]; Arrays.setAll(bytes, n -> bytesPrim[n]); return bytes; }

Desafortunadamente, no puede hacer esto para convertir de Byte[] a byte[] . Arrays ha establecido setAll para double[] , int[] y long[] , pero no para otros tipos primitivos.


byte [] a Byte []:

byte[] bytes = ...; Byte[] byteObject = ArrayUtils.toObject(bytes);

Byte [] a byte []:

Byte[] byteObject = new Byte[0]; byte[] bytes = ArrayUtils.toPrimitive(byteObject);


Byte clase de Byte es un contenedor para el byte primitivo. Esto debería hacer el trabajo:

byte[] bytes = new byte[10]; Byte[] byteObjects = new Byte[bytes.length]; int i=0; // Associating Byte array values with bytes. (byte[] to Byte[]) for(byte b: bytes) byteObjects[i++] = b; // Autoboxing. .... int j=0; // Unboxing Byte values. (Byte[] to byte[]) for(Byte b: byteObjects) bytes[j++] = b.byteValue();


byte[] toPrimitives(Byte[] oBytes) { byte[] bytes = new byte[oBytes.length]; for(int i = 0; i < oBytes.length; i++){ bytes[i] = oBytes[i]; } return bytes; }

Inverso:

//byte[] to Byte[] Byte[] toObjects(byte[] bytesPrim) { Byte[] bytes = new Byte[bytesPrim.length]; int i = 0; for (byte b : bytesPrim) bytes[i++] = b; //Autoboxing return bytes; }