我有一个 ArrayList<String>
,想通过UDP发送,但是发送方法需要 byte[]
。
有人能告诉我如何将我的 ArrayList<String>
转换为 byte[]
吗?
谢谢!
我有一个 ArrayList<String>
,想通过UDP发送,但是发送方法需要 byte[]
。
有人能告诉我如何将我的 ArrayList<String>
转换为 byte[]
吗?
谢谢!
这取决于你希望在另一端如何解码这些字节。一个合理的方法是像DataOutputStream
一样使用UTF-8编码,对列表中的每个字符串进行编码。 对于一个字符串,它会写入两个字节来表示UTF-8编码的长度,然后是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);
}
out.flush();
。这将确保所有数据都被发送到流中。 - cobarzan 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]);