जवाबों:
निर्भर करता है कि आप क्या करना चाहते हैं।
यदि आप जो चाहते हैं वह बाइट्स को प्राप्त करने के लिए है जो शेष हैं (स्थिति और सीमा के बीच), तो आपके पास क्या काम होगा। आप भी कर सकते हैं:
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()];
bb.get(b);
जो बाइटबफ़र जेवाडॉक्स के अनुसार बराबर है ।
bb.slice().remaining()
। इस तरह यह मूल बफर को छूने के बिना एक साफ डंप की तरह दिखता है।
int
बिटमैस्क के रूप में कास्ट और उपयोग करने की आवश्यकता int unsigned_byte = b[k] & 0xff;
है k
।
ByteBuffer#clear
पहले कॉल करेंगे ?
ध्यान दें कि bb.array () बाइट-बफ़र स्थिति का सम्मान नहीं करता है, और इससे भी बदतर हो सकता है यदि आप जिस बाइटबफ़र पर काम कर रहे हैं वह किसी अन्य बफर का एक टुकड़ा है।
अर्थात
byte[] test = "Hello World".getBytes("Latin1");
ByteBuffer b1 = ByteBuffer.wrap(test);
byte[] hello = new byte[6];
b1.get(hello); // "Hello "
ByteBuffer b2 = b1.slice(); // position = 0, string = "World"
byte[] tooLong = b2.array(); // Will NOT be "World", but will be "Hello World".
byte[] world = new byte[5];
b2.get(world); // world = "World"
जो आप करने का इरादा नहीं कर सकते हैं।
यदि आप वास्तव में बाइट-सरणी की प्रतिलिपि नहीं बनाना चाहते हैं, तो एक कार्य-बाइट बफ़र-बफ़र की सरणी का उपयोग करने के लिए हो सकता है () + शेष (), लेकिन यह केवल तभी काम करता है जब एप्लिकेशन बाइट-बफ़र की अनुक्रमणिका + लंबाई का समर्थन करता है। की जरूरत है।
इतना सरल है
private static byte[] getByteArrayFromByteBuffer(ByteBuffer byteBuffer) {
byte[] bytesArray = new byte[byteBuffer.remaining()];
byteBuffer.get(bytesArray, 0, bytesArray.length);
return bytesArray;
}
यदि किसी को दिए गए (प्रत्यक्ष) बाइटबफ़र की आंतरिक स्थिति के बारे में कुछ नहीं पता है और वह बफर की पूरी सामग्री को फिर से प्राप्त करना चाहता है, तो इसका उपयोग किया जा सकता है:
ByteBuffer byteBuffer = ...;
byte[] data = new byte[byteBuffer.capacity()];
((ByteBuffer) byteBuffer.duplicate().clear()).get(data);
ByteBuffer.get(byte[])
ByteBuffer
data
चर में हैं। गेटवे लौटता है this
, इसका जावदोक देखें।
यह बाइट पाने का एक सरल तरीका है [], लेकिन एक बाइटबफ़र का उपयोग करने के बिंदु का एक हिस्सा बाइट बनाने से बच रहा है []। शायद आप बाइट से जो कुछ भी पाना चाहते थे वह आपको सीधे मिल सकता है [] सीधे बाइट बफ़र से।
bb.capacity()
हो सकताbb.remaining()
है, इसलिए जबbb.array()
आप सही होते हैं तो आपको उनकी समानता का परीक्षण के रूप में उपयोग नहीं करना चाहिए । देखते हैंByteBuffer.slice()
।