2011-04-11 160 views
13

我有一个ArrayList<String>,我想通过UDP发送,但发送方法需要byte[]将ArrayList <String>转换为字节[]

谁能告诉我如何将我的ArrayList<String>转换为byte[]

谢谢!

+0

http://www.java2s.com/Code/JavaAPI/java.util/ArrayListtoArrayTa.htm – 2011-04-11 09:01:32

回答

9

如果对方也是java,则可以使用ObjectOutputStream。它将序列化对象(您可以使用ByteArrayOutputStream来获取写入的字节)

15

这实际上取决于您希望如何在另一端解码这些字节。一种合理的方法是对列表中的每个字符串使用UTF-8编码,如DataOutputStream。对于字符串,它会为UTF-8编码的长度写入2个字节,后跟UTF-8字节。如果你不在另一端使用Java,这将是可移植的。下面是与编码的例子以这种方式使用的Java双方解码ArrayList<String>

// 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

你可能会喜欢在可用时首先发送长度()通常不是一个好的方法。 – 2011-04-11 12:56:45

+0

您可能需要在for循环后添加'out.flush();'。这将确保您的所有数据将被发送到流。 – cobarzan 2016-02-05 17:49:09