2010-02-20 6 views
7

Quiero hacer una matriz de bytes creable. Es decir, una lista. en C# sería Normalamente hacer la siguiente sintaxissintaxis de genéricos de la lista de Java para tipos primitivos

List<byte> mylist = new List<byte>(); 

donde como en java esta sintaxis no funciona y he buscado en Google y encontré el código de abajo

List myList = new ArrayList(); 

pero eso no es lo que quiero. ¿Alguna idea es donde me estoy equivocando?

Respuesta

5

Utilice la clase contenedora Byte:

List<Byte> mylist = new ArrayList<Byte>(); 

Entonces, a causa de autoboxing, todavía puede tener:

for (byte b : mylist) { 

} 
+1

La lista es una interfaz, por lo que no puede crear una nueva. Tendría que utilizar una clase concreta en su lugar, como ArrayList o LinkedList –

+0

@Michael Williamson un error tipográfico, en lugar de que yo no lo sepa;) – Bozho

+0

Gracias Bozho que funcionó para mí. –

3

tiene una clase Byte proporcionada por el JRE.

Esta clase es la clase correspondiente para el tipo primitivo byte.

Ver here para tipos primitivos.

Usted puede hacer esto:

List<Byte> myList = new ArrayList<Byte>(); 
byte b = 127; 
myList.add(b); 
b = 0; // resetting 
b = myList.get(0); // => b = 127 again 

Como Michael señaló en los comentarios:

List<Byte> myList = new ArrayList<Byte>(); 
Byte b = null; 
myList.add(b); 
byte primitiveByte = myList.get(0); 

resultados en:

Exception in thread "main" java.lang.NullPointerException 
    at TestPrimitive.main(TestPrimitive.java:12) 
+2

no da enlaces a 1.4.2 – Bozho

+1

Probablemente valga la pena agregar que los genéricos y primitivos no funcionan bien juntos, es decir, no se puede usar una primitiva como argumento de tipo, por lo tanto, la necesidad de usar Byte en lugar de byte. Autoboxing no es perfecto: un byte puede ser nulo, mientras que un byte no puede, por lo que intentar asignar un byte a un byte puede dar como resultado una excepción de puntero nulo. –

+0

@Bozho: Todavía aparecen como los primeros resultados en Google o Bing. Un buen ejemplo donde los motores de búsqueda apestan ;-) – Joey

0

Tenga en cuenta que el uso de un ArrayList<Byte> para almacenar una variedad growable de bytes probablemente no sea una buena idea, ya que cada byte se pone en caja, lo que significa que un nuevo objeto Byte es al situado. Entonces, el costo total de la memoria por byte es un puntero en ArrayList + un objeto Byte.

Probablemente sea mejor usar un java.io.ByteArrayOutputStream. Allí, el costo de memoria por byte es de 1 byte.

Podemos proporcionarle un mejor asesoramiento si describe el contexto un poco más.

Cuestiones relacionadas