将ArrayList 转换为byte

我有一个我想通过UDP发送的ArrayList ,但send方法需要byte[]

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

谢谢!

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

 // example input list List list = new ArrayList(); 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 list = new ArrayList<>(); list.add("word1"); list.add("word2"); int numBytes = 0; for (String str: list) numBytes += str.getBytes().length; List 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]);