2010-02-20 14 views
7

मैं बाइट्स की बढ़ती सरणी बनाना चाहता हूं। मैं एक सूची है। सी # में आम तौर पर निम्न सिंटैक्स करना होगाप्राचीन प्रकार के लिए जावा सूची जेनेरिक वाक्यविन्यास

List<byte> mylist = new List<byte>(); 

जहां जावा में इस वाक्य काम नहीं करता है के रूप में और मैं आसपास googled और नीचे दिए गए कोड

List myList = new ArrayList(); 

पाया, लेकिन वह नहीं है जो मैं चाहता है। कोई विचार है जहां मैं गलत जा रहा हूँ?

उत्तर

5

आवरण वर्ग Byte का उपयोग करें: autoboxing की वजह से,

List<Byte> mylist = new ArrayList<Byte>(); 

उसके बाद, आप अभी भी हो सकता है:

for (byte b : mylist) { 

} 
+1

सूची एक इंटरफ़ेस है, इसलिए आप एक नया नहीं कर सकते हैं। आपको इसके बजाय एक कंक्रीट क्लास का उपयोग करना होगा, जैसे कि ऐरेलिस्ट या लिंक्डलिस्ट –

+0

@ माइकल विलियमसन एक टाइपो, मुझे यह नहीं पता कि;) – Bozho

+0

धन्यवाद Bozho जो मेरे लिए काम करता है। –

3

आप JRE द्वारा प्रदान की एक Byte वर्ग की है।

यह कक्षा byte आदिम प्रकार के लिए इसी वर्ग है।

आदिम प्रकारों के लिए here देखें।

आप ऐसा कर सकते हैं:

List<Byte> myList = new ArrayList<Byte>(); 
byte b = 127; 
myList.add(b); 
b = 0; // resetting 
b = myList.get(0); // => b = 127 again 

माइकल टिप्पणी में बताया के रूप में:

List<Byte> myList = new ArrayList<Byte>(); 
Byte b = null; 
myList.add(b); 
byte primitiveByte = myList.get(0); 

परिणामों में:

Exception in thread "main" java.lang.NullPointerException 
    at TestPrimitive.main(TestPrimitive.java:12) 
+2

1.4.2 – Bozho

+1

के लिंक न दें शायद यह जोड़ना उचित है कि जेनेरिक और प्राइमेटिव अच्छी तरह से एक साथ नहीं खेलते हैं - यानी, आप एक प्रकार के तर्क के रूप में आदिम का उपयोग नहीं कर सकते हैं, इसलिए बाइट का उपयोग करने की आवश्यकता बाइट। Autoboxing सही नहीं है - एक बाइट शून्य हो सकता है, जहां एक बाइट नहीं कर सकता है, इसलिए बाइट को बाइट को असाइन करने का प्रयास करने से नल सूचक अपवाद हो सकता है। –

+0

@ बोझो: वे अभी भी Google या Bing पर पहले परिणाम के रूप में दिखाई देते हैं। एक अच्छा उदाहरण जहां खोज इंजन चूसते हैं ;-) – Joey

0

कृपया ध्यान दें कि ArrayList<Byte> का उपयोग कर एक उगने वाली दाढ़ी सरणी स्टोर करने के लिए बाइट्स शायद एक अच्छा विचार नहीं है, क्योंकि प्रत्येक बाइट बॉक्सिंग हो जाता है, जिसका मतलब है कि एक नया बाइट ऑब्जेक्ट अल है स्थित है। तो प्रति बाइट की कुल मेमोरी लागत ArrayList + एक बाइट ऑब्जेक्ट में एक सूचक है।

java.io.ByteArrayOutputStream का उपयोग करना शायद बेहतर है। वहां, प्रति बाइट मेमोरी लागत 1 बाइट है।

यदि आप थोड़ा और संदर्भ का वर्णन करते हैं तो हम बेहतर सलाह प्रदान कर सकते हैं।

6

GNU Trove library से आप TByteArrayList का भी उपयोग कर सकते हैं।

+0

अधिक अपवॉट लोग, केवल एकमात्र प्रदर्शन समाधान सुझाया गया है, और आप बस ... –

संबंधित मुद्दे