2010-07-04 21 views
26

Tratando de resolver lo que debería ser un problema simple. Obtuve una lista de bytes, quiero convertirlo al final de una función en una matriz de bytes.Java: convertir la lista de bytes en una matriz de bytes

final List<Byte> pdu = new ArrayList<Byte>(); 
.... 
return pdu.toArray(new byte[pdu.size()]);; 

compilador no le gusta la sintaxis en mi toArray. ¿Cómo arreglar esto?

Respuesta

40

El compilador no le gusta, porque byte[] no es .

Lo que puede hacer es usar commons-lang 's ArrayUtils.toPrimitive(wrapperCollection):

Byte[] bytes = pdu.toArray(new Byte[pdu.size()]); 
return ArrayUtils.toPrimitive(bytes); 

Si no puede utilizar commons-lang, sólo tiene que recorrer la matriz y llenar otra matriz de tipo byte[] con los valores (que lo harán se desempaquetará automáticamente)

Si puede vivir con Byte[] en lugar de byte[] - déjelo así.

+0

Muchas gracias! :) No había visto ArrayUtils.toPrimitive antes, bastante útil. –

+1

+1 por esa materia de commons-lang –

+1

No me gusta la solución de ArrayUtils. Tiene que haber una solución de caja para Java 8. – JohnMerlino

18

Utilice el método Guava .

List<Byte> list = ... 
byte[] bytes = Bytes.toArray(list); 

Esto le ahorra tener que hacer la conversión intermedia matriz que el equivalente Commons Lang exige a sí mismo.

1

Proveedores Dollar (check this revision):

import static com.humaorie.dollar.Dollar.* 
... 

List<Byte> pdu = ...; 
byte[] bytes = $(pdu).convert().toByteArray(); 
Cuestiones relacionadas