2011-04-11 19 views
13

UDP aracılığıyla göndermek istediğim bir ArrayList<String> sahibim ancak gönderme yöntemi byte[] gerektirir.ArrayList <String>'u [byte] dönüştürün []

ArrayList<String> benim byte[] numaralı telefonumu nasıl dönüştürdüğümü söyleyebilir misiniz?

Teşekkür ederiz!

+0

Sen isteyebilirsiniz http://www.java2s.com/Code/JavaAPI/java.util/ArrayListtoArrayTa.htm –

cevap

9

Diğer taraf da java ise, ObjectOutputStream'u kullanabilirsiniz. Nesneyi serileştirir (yazılan baytları almak için bir ByteArrayOutputStream kullanabilirsiniz)

15

Gerçekten de bu baytların diğer ucunda nasıl çözüleceğini beklediğinize bağlıdır. Bir mantıklı yol, listedeki her dize için DataOutputStream gibi UTF-8 kodlamasını kullanmaktır. Bir dize için UTF-8 kodlamanın uzunluğu ve ardından UTF-8 baytları için 2 bayt yazar. Diğer ucunda Java kullanmıyorsanız bu taşınabilir olacaktır. İşte bir kodlama örneği ve var her iki taraf için Java kullanarak bu yolla bir ArrayList<String> deşifre:

// 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

önce uzunluğu gönder() genellikle kullanmak için iyi bir yöntem değildir. –

+0

For döngüsünden sonra 'out.flush();' eklemek isteyebilirsiniz. Bu, tüm verilerinizin Akışa gönderilmesini sağlayacaktır. – cobarzan