2011-04-11 2 views
13

나는 UDP를 통해 보내려는 ArrayList<String>이지만 전송 방법은 byte[]이 필요합니다.ArrayList <String>을 byte []로 변환하십시오.

누구나 ArrayList<String>byte[]으로 변환하는 방법을 알려 줄 수 있습니까?

감사합니다.

+0

당신이하는 것 같아서 http://www.java2s.com/Code/JavaAPI/java.util/ArrayListtoArrayTa.htm –

답변

9

반대쪽이 java 인 경우 ObjectOutputStream을 사용할 수 있습니다. 그것은 개체를 serialize합니다 (쓸 수있는 바이트를 얻으려면 ByteArrayOutputStream 사용할 수 있습니다)

15

정말 어떻게 다른 쪽 끝에서 이러한 바이트를 디코딩 할 기대하는 따라 달라집니다. 하나의 합리적인 방법은 DataOutputStream과 같은 UTF-8 인코딩을 사용하여 목록의 각 문자열에 적용하는 것입니다. 문자열의 경우 UTF-8 인코딩의 길이에 이어 2 바이트를 쓰고 UTF-8 바이트를 씁니다. 다른 쪽에서 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); 
} 
+0

available()가 일반적으로 사용하기에 좋은 방법은 아니므로 길이를 먼저 보냅니다. –

+0

for 루프 뒤에'out.flush();를 추가 할 수 있습니다. 그러면 모든 데이터가 스트림으로 전송됩니다. – cobarzan

관련 문제