将ArrayList <string>转换为byte [] </string>

时间:2011-04-11 08:59:38

标签: java

我想通过UDP发送ArrayList<String>,但send方法需要byte[]

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

谢谢!

3 个答案:

答案 0 :(得分:16)

这实际上取决于您希望如何在另一端解码这些字节。一种合理的方法是对列表中的每个字符串使用DataOutputStream之类的UTF-8编码。对于字符串,它为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);
}

答案 1 :(得分:10)

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

答案 2 :(得分:0)

另一种解决方案是简单地将ArrayList中每个字符串中的每个字节添加到列表中,然后将该列表转换为数组。

    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]);