2011-04-11 18 views
13

में ArrayList कनवर्ट करें मेरे पास ArrayList<String> है जो मैं यूडीपी के माध्यम से भेजना चाहता हूं लेकिन प्रेषण विधि को byte[] की आवश्यकता है। बाइट []

क्या कोई मुझे बता सकता है कि मेरे ArrayList<String> से byte[] को कैसे परिवर्तित करें?

धन्यवाद!

+0

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

उत्तर

9

यदि दूसरी तरफ जावा भी है, तो आप ObjectOutputStream का उपयोग कर सकते हैं। यह ऑब्जेक्ट को क्रमबद्ध करेगा (आप ByteArrayOutputStream का उपयोग बाइट्स लिखे जाने के लिए कर सकते हैं)

15

यह वास्तव में इस बात पर निर्भर करता है कि आप दूसरी बाइट पर इन बाइट्स को कैसे डीकोड करने की अपेक्षा करते हैं। सूची में प्रत्येक स्ट्रिंग के लिए DataOutputStream जैसे यूटीएफ -8 एन्कोडिंग का उपयोग करने का एक उचित तरीका होगा। एक स्ट्रिंग के लिए यह यूटीएफ -8 एन्कोडिंग की लंबाई के लिए 2 बाइट्स लिखता है जिसके बाद यूटीएफ -8 बाइट्स होता है। यदि आप दूसरे छोर पर जावा का उपयोग नहीं कर रहे हैं तो यह पोर्टेबल होगा। यहाँ एन्कोडिंग का एक उदाहरण और है इस तरह से दोनों पक्षों के लिए जावा का उपयोग करने में एक 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

आप पसंद कर सकते हैं उपलब्ध लंबाई को पहले भेजें() आमतौर पर उपयोग करने के लिए एक अच्छी विधि नहीं है। –

+0

आप लूप के बाद 'out.flush(); 'जोड़ना चाहेंगे। इससे यह सुनिश्चित होगा कि आपका सभी डेटा स्ट्रीम पर भेजा जाएगा। – cobarzan