2010-07-04 20 views
26

हल करने की कोशिश करना एक साधारण समस्या क्या होनी चाहिए। बाइट्स की एक सूची प्राप्त करें, इसे फ़ंक्शन के अंत में बाइट्स की सरणी में परिवर्तित करना चाहते हैं।जावा: बाइट्स की सूची बाइट्स की सरणी में कनवर्ट करें

final List<Byte> pdu = new ArrayList<Byte>(); 
.... 
return pdu.toArray(new byte[pdu.size()]);; 

संकलक मेरी toArray पर वाक्य रचना पसंद नहीं है। इसे कैसे ठीक करें?

उत्तर

40

कंपाइलर इसे पसंद नहीं करता है, क्योंकि byte[]Byte[] नहीं है।

आप क्या कर सकते का उपयोग है commons-lang के ArrayUtils.toPrimitive(wrapperCollection):

Byte[] bytes = pdu.toArray(new Byte[pdu.size()]); 
return ArrayUtils.toPrimitive(bytes); 

आप कॉमन्स-लैंग, बस सरणी के माध्यम से लूप उपयोग नहीं कर सकते और मूल्यों के साथ प्रकार byte[] का एक और सरणी भरने (वे करेंगे स्वचालित रूप से अनबॉक्स हो)

यदि आप byte[] के बजाय Byte[] के साथ रह सकते हैं - इसे इस तरह से छोड़ दें।

+0

धन्यवाद एक बहुत! :) मैंने पहले उपयोगी नहीं देखा था, पहले से ही ArrayUtils.to प्राथमिक। –

+1

+1 उस कॉमन्स-लैंग सामान के लिए +1 –

+1

मुझे ArrayUtils का समाधान पसंद नहीं है। जावा 8 के लिए बॉक्स समाधान से बाहर होना होगा। – JohnMerlino

2

मुख्य रूप से, आप toArray(T[]) के साथ एक आदिम प्रकार का उपयोग नहीं कर सकते हैं।

देखें: How to convert List<Integer> to int[] in Java?। यह वही समस्या है जो पूर्णांक पर लागू होती है।

18

Guava की विधि Bytes.toArray(Collection<Byte> collection) का उपयोग करें।

List<Byte> list = ... 
byte[] bytes = Bytes.toArray(list); 

यह आपको इंटरमीडिएट सरणी रूपांतरण करने के लिए बचाता है जो कॉमन्स लैंग समकक्ष को स्वयं की आवश्यकता होती है।

1

भी Dollar (check this revision) की कोशिश:

import static com.humaorie.dollar.Dollar.* 
... 

List<Byte> pdu = ...; 
byte[] bytes = $(pdu).convert().toByteArray(); 
संबंधित मुद्दे