2013-07-03 5 views
5

ठीक है, इसलिए मैं देख रहा था कि बाइट सरणी से जावा में इसके अंकीय मूल्य में कनवर्ट करने का सबसे अच्छा तरीका क्या था और मैं इस link पर आया था। और दूसरा जवाब बाइटबफर वर्ग के उपयोग का उल्लेख करता है। उन लिंक पर क्लिक करने की इच्छा नहीं है कि के लिए, मूल रूप से सवाल पूछता है कि मेरे पास है:जावा में बाइटबफर के लपेट विधि का उपयोग कैसे करें

byte[] by = new byte[8]; 

कैसे एक परिवर्तित कि int करने के लिए करता है? खैर जवाब जाता है ...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4}); 
long l = bb.getLong(); 

System.out.println(l); 

परिणाम

4 

और वह जानने के लिए भयानक है, लेकिन मैं सिर्फ इतना है कि मार्ग जाने से पहले कुछ इस बात की पुष्टि करना चाहते हैं।

कहें कि मैंने पहले बाइट सरणी में पढ़ा है जो 8 बाइट लंबा है।

byte[] oldByte = new byte[8]; 

तो मुझे क्या करना ...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]}); 
int intValue = bb.getInt(); 

कि काम/पिछले उदाहरण के रूप में एक ही तरीके से पढ़ा जा सकता है?

+0

क्योंकि आप 4 बाइट की जरूरत है एक पूर्णांक के लिए आप एक java.nio.BufferUnderflowException मिल जाएगा, लेकिन आप केवल दे रहे हैं बाइटबफर 2 बाइट्स। – Brinnis

उत्तर

6

documentation के लिए ByteBuffer वर्ग निर्दिष्ट करता है कि getInt() विधि अगले चार बाइट्स पढ़ता है, इसलिए यदि आप केवल wrap करने के लिए कॉल करने के लिए दो बाइट्स से गुजर रहे हैं, तो आप एक BufferUnderflowException मिल जाएगा:

फेंकता : BufferUnderflowException - अगर वहाँ चार से कम इस बफर में शेष बाइट्स हैं

+0

तो आप कह रहे हैं कि यह होना चाहिए: 'बाइटबफर बीबी = बाइटबफर.व्रैप (नया बाइट [] {0, 0, पुरानीबाइट [2], पुरानी बाइट [3]}); '? –

+1

@ This0nePr0grammer हां, दस्तावेज़ों के अनुसार डिफ़ॉल्ट बाइट ऑर्डर बड़ा एंडियन है, इसलिए यह सही दिखता है। – andersschuller

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