我有一個ArrayList<String>
,我想通過UDP發送,但發送方法需要byte[]
。將ArrayList <String>轉換爲字節[]
誰能告訴我如何將我的ArrayList<String>
轉換爲byte[]
?
謝謝!
我有一個ArrayList<String>
,我想通過UDP發送,但發送方法需要byte[]
。將ArrayList <String>轉換爲字節[]
誰能告訴我如何將我的ArrayList<String>
轉換爲byte[]
?
謝謝!
如果對方也是java,則可以使用ObjectOutputStream
。它將序列化對象(您可以使用ByteArrayOutputStream
來獲取寫入的字節)
這實際上取決於您希望如何在另一端解碼這些字節。一種合理的方法是對列表中的每個字符串使用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);
}
你可能會喜歡在可用時首先發送長度()通常不是一個好的方法。 – 2011-04-11 12:56:45
您可能需要在for循環後添加'out.flush();'。這將確保您的所有數據將被髮送到流。 – cobarzan 2016-02-05 17:49:09
http://www.java2s.com/Code/JavaAPI/java.util/ArrayListtoArrayTa.htm – 2011-04-11 09:01:32