2011-04-11 166 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