Преобразовать ArrayList <String> в байт []

У меня есть ArrayList<String>, который я хочу отправить через UDP, но для метода отправки требуется byte[].

Может ли кто-нибудь сказать мне, как преобразовать мой ArrayList<String> в byte[]?

Спасибо!

Ответ 1

Это действительно зависит от того, как вы планируете декодировать эти байты на другом конце. Одним из разумных способов было бы использовать кодировку UTF-8, такую ​​как DataOutputStream для каждой строки в списке. Для строки он записывает 2 байта для длины кодировки UTF-8, за которой следуют байты UTF-8. Это было бы портативным, если вы не используете Java на другом конце. Здесь пример кодирования и декодирования ArrayList<String> таким образом, используя Java для обеих сторон:

// 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);
}

Ответ 2

Если другая сторона также является java, вы можете использовать ObjectOutputStream. Он будет сериализовать объект (вы можете использовать ByteArrayOutputStream для написания байтов)