2011-04-11 24 views
13

Tengo un ArrayList<String> que deseo enviar a través de UDP pero el método de envío requiere byte[].Convertir ArrayList <String> en byte []

¿Alguien me puede decir cómo convertir mi ArrayList<String> en byte[]?

¡Gracias!

+0

http://www.java2s.com/Code/JavaAPI/java.util/ArrayListtoArrayTa.htm –

Respuesta

9

Si el otro lado también es java, puede usar ObjectOutputStream. Se serializará el objeto (puede usar un ByteArrayOutputStream para obtener los bytes escritos)

15

Realmente depende de cómo espere decodificar estos bytes en el otro extremo. Una forma razonable sería usar la codificación UTF-8 como lo hace DataOutputStream para cada cadena en la lista. Para una cadena, escribe 2 bytes para la longitud de la codificación UTF-8 seguida de los bytes UTF-8. Esto sería portátil si no está utilizando Java en el otro extremo. Aquí está un ejemplo de codificación y decodificación de una ArrayList<String> de esta manera el uso de Java para ambas partes:

// example input list 
List<String> list = new ArrayList<String>(); 
list.add("foo"); 
list.add("bar"); 
list.add("baz"); 

// write to byte array 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream out = new DataOutputStream(baos); 
for (String element : list) { 
    out.writeUTF(element); 
} 
byte[] bytes = baos.toByteArray(); 

// read from byte array 
ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 
DataInputStream in = new DataInputStream(bais); 
while (in.available() > 0) { 
    String element = in.readUTF(); 
    System.out.println(element); 
} 
+0

que le gustaría enviar la longitud primero como disponible() generalmente no es un buen método para usar. –

+0

Es posible que desee agregar 'out.flush();' después del ciclo for. Esto asegurará que todos sus datos serán enviados a la transmisión. – cobarzan