ByteBuffer
जावा में उदाहरण के लिए आवेदन क्या हैं ? कृपया किसी भी उदाहरण परिदृश्य को सूचीबद्ध करें जहाँ इसका उपयोग किया जाता है। धन्यवाद!
ByteBuffer
जावा में उदाहरण के लिए आवेदन क्या हैं ? कृपया किसी भी उदाहरण परिदृश्य को सूचीबद्ध करें जहाँ इसका उपयोग किया जाता है। धन्यवाद!
जवाबों:
यह इसके उपयोग और कमियों का एक अच्छा विवरण है। जब भी आपको तेज निम्न-स्तर I / O करने की आवश्यकता होती है, आप अनिवार्य रूप से इसका उपयोग करते हैं। यदि आप एक टीसीपी / आईपी प्रोटोकॉल को लागू करने जा रहे हैं या यदि आप एक डेटाबेस (DBMS) लिख रहे हैं तो यह वर्ग काम आएगा।
बाइटबफ़र वर्ग महत्वपूर्ण है क्योंकि यह जावा में चैनलों के उपयोग के लिए एक आधार बनाता है। ByteBuffer वर्ग, बाइट बफ़र्स पर आपरेशन के छह श्रेणियों को परिभाषित करता है के रूप में जावा 7 दस्तावेज में कहा गया है :
निरपेक्ष और सापेक्ष प्राप्त और डाल तरीकों कि पढ़ सकते हैं और एक बाइट लिखना;
सापेक्ष बल्क को ऐसे तरीके मिलते हैं जो इस बफर से बाइट्स के सन्निहित अनुक्रमों को एक सरणी में स्थानांतरित करते हैं;
सापेक्ष बल्क पुट मेथड्स जो एक बाइट सरणी या किसी अन्य बाइट बफर से बाइट्स के सन्निहित अनुक्रमों को इस बफर में स्थानांतरित करते हैं;
निरपेक्ष और सापेक्ष प्राप्त करते हैं और एक विशेष बाइट क्रम में बाइट्स के अनुक्रमों से उन्हें अनुवाद करने और अन्य आदिम प्रकारों के मूल्यों को पढ़ने और लिखने वाले तरीके डालते हैं;
व्यू बफ़र्स बनाने की विधियाँ, जो एक बाइट बफर को किसी अन्य आदिम प्रकार के मूल्यों वाले बफर के रूप में देखने की अनुमति देती हैं; तथा
एक बाइट बफर को कॉम्पैक्ट करने , डुप्लिकेट करने और स्लाइस करने के तरीके ।
Example code : Putting Bytes into a buffer.
// Create an empty ByteBuffer with a 10 byte capacity
ByteBuffer bbuf = ByteBuffer.allocate(10);
// Get the buffer's capacity
int capacity = bbuf.capacity(); // 10
// Use the absolute put(int, byte).
// This method does not affect the position.
bbuf.put(0, (byte)0xFF); // position=0
// Set the position
bbuf.position(5);
// Use the relative put(byte)
bbuf.put((byte)0xFF);
// Get the new position
int pos = bbuf.position(); // 6
// Get remaining byte count
int rem = bbuf.remaining(); // 4
// Set the limit
bbuf.limit(7); // remaining=1
// This convenience method sets the position to 0
bbuf.rewind(); // remaining=7
जावा ओरिएंट स्ट्रीम ओरिएंटेड एपीआई का उपयोग करके यूजर स्पेस के भीतर डेटा के अस्थायी भंडारण के रूप में बफर का उपयोग करके किया जाता है। डीएमए द्वारा डिस्क से पढ़ा गया डेटा पहले कर्नेल स्पेस में बफ़र्स पर कॉपी किया जाता है, जिसे बाद में यूजर स्पेस में बफर में ट्रांसफर कर दिया जाता है। इसलिए उपरि है। इससे बचने से प्रदर्शन में काफी लाभ मिल सकता है।
हम इस अस्थायी बफ़र को उपयोगकर्ता स्थान में छोड़ सकते हैं, अगर कर्नेल स्थान में बफ़र तक सीधे पहुंचने का कोई तरीका है। Java NIO ऐसा करने का एक तरीका प्रदान करता है।
ByteBuffer
जावा NIO द्वारा प्रदान किए गए कई बफ़र्स में से एक है। इसके सिर्फ एक कंटेनर या होल्डिंग टैंक से डेटा पढ़ने या डेटा लिखने के लिए। उपरोक्त व्यवहार बफ़र allocateDirect()
पर एपीआई का उपयोग करके एक सीधा बफर आवंटित करके प्राप्त किया जाता है ।
यहाँ एक शानदार लेख है जो बाइटबफ़र के लाभों को समझाता है। लेख में मुख्य बिंदु निम्नलिखित हैं:
प्रत्यक्ष बाइटबफ़र / मैप्डबाइटबफ़र के लिए विशेष रूप से निम्नलिखित लाभ हैं। ध्यान दें कि ढेर के बाहर प्रत्यक्ष बफ़र्स बनाए जाते हैं:
जीसी चक्रों से अप्रभावित : कूड़े के संग्रह के दौरान प्रत्यक्ष बफ़र्स को स्थानांतरित नहीं किया जाएगा क्योंकि वे ढेर के बाहर रहते हैं। Terracota के BigMemory कैशिंग प्रौद्योगिकी यह लाभ पर काफी भरोसा करने लगता है। यदि वे ढेर पर होते हैं, तो यह जीसी ठहराव समय को धीमा कर देगा।
प्रदर्शन को बढ़ावा देने के लिए : धारा IO में, रीड कॉल कॉल्स सिस्टम कॉल होती है, जिसके लिए उपयोगकर्ता के बीच कर्नेल मोड और इसके विपरीत एक संदर्भ-स्विच की आवश्यकता होती है, जो विशेष रूप से महंगा होगा यदि फ़ाइल लगातार एक्सेस की जा रही है। हालाँकि, मेमोरी-मैपिंग के साथ यह संदर्भ-स्विचिंग कम हो जाती है क्योंकि डेटा मेमोरी (MappedByteBuffle) में पाए जाने की अधिक संभावना है। यदि डेटा मेमोरी में उपलब्ध है, तो यह ओएस, यानी बिना संदर्भ-स्विचिंग के सीधे पहुंच जाता है।
ध्यान दें कि MpedByteBuffers बहुत उपयोगी हैं, खासकर यदि फाइलें बड़ी हैं और ब्लॉक के कुछ समूह अधिक बार एक्सेस किए जाते हैं।