簡體   English   中英

轉換ArrayList <String> 到byte []

[英]Convert ArrayList<String> to byte []

我有一個我想通過UDP發送的ArrayList<String> ,但send方法需要byte[]

誰能告訴我如何將我的ArrayList<String>轉換為byte[]

謝謝!

這實際上取決於您希望如何在另一端解碼這些字節。 一種合理的方法是使用像DataOutputStream這樣的UTF-8編碼為列表中的每個字符串。 對於字符串,它為UTF-8編碼的長度寫入2個字節,后跟UTF-8字節。 如果您不在另一端使用Java,這將是可移植的。 以下是使用Java為這兩方ArrayList<String>和解碼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);
}

如果另一方也是java,則可以使用ObjectOutputStream 它將序列化對象(您可以使用ByteArrayOutputStream來獲取寫入的字節)

替代解決方案是將ArrayList中的每個字符串中的每個字節添加到List中,然后將該列表轉換為數組。

    List<String> list = new ArrayList<>();
    list.add("word1");
    list.add("word2");

    int numBytes = 0;
    for (String str: list)
        numBytes += str.getBytes().length;

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

    for (String str: list) {
        byte[] currentByteArr = str.getBytes();
        for (byte b: currentByteArr)
            byteList.add(b);
    }
    Byte[] byteArr = byteList.toArray(new Byte[numBytes]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM