DataBuffer

सार्वजनिक इंटरफ़ेस डेटाबफ़र
ज्ञात अप्रत्यक्ष उपवर्ग

एक विशिष्ट प्रकार के डेटा का एक कंटेनर।

DataBuffer के उदाहरण मूल या हीप मेमोरी सेगमेंट को एक रैखिक दृश्य में मैप करते हैं जो समर्थन करता है:

  • 64-बिट अनुक्रमण, 2 31 बाइट्स से बड़े बफर के साथ काम करने की अनुमति देता है
  • किसी भी प्रकार की वस्तु का भंडारण, न कि केवल आदिम
  • जेनेरिक प्रकार बॉक्स्ड प्रकारों के साथ भी सीधे काम करने की अनुमति देते हैं, जिसके लिए मानक जेडीके बफ़र्स की तरह स्पष्ट बफ़र प्रकारों की आवश्यकता नहीं होती है।
यह ध्यान रखना महत्वपूर्ण है कि इस बात की कोई गारंटी नहीं है कि DataBuffer द्वारा प्रबंधित मेमोरी रैखिक है, विशेष रूप से गैर-आदिम प्रकार या बड़े बफ़र्स से निपटने पर।

सार्वजनिक तरीके

सार <आर> आर
स्वीकार करें ( DataStorageVisitor <R> विज़िटर)
इस बफ़र के बैकिंग स्टोरेज का दौरा करता है।
सार डेटाबफ़र <टी>
CopyTo ( डेटाबफर <टी> डीएसटी, लंबा आकार)
इस बफ़र में स्रोत सरणी में ऑब्जेक्ट के संदर्भ लिखें।
अमूर्त बूलियन
बराबर (वस्तु obj)
डेटा बफ़र्स के बीच समानता की जाँच करता है।
सार टी
getObject (लंबा सूचकांक)
दिए गए सूचकांक पर मान पढ़ता है।
अमूर्त बूलियन
केवल पढ़ने योग्य है ()
बताता है कि यह बफ़र किसी पहुंच योग्य सरणी द्वारा समर्थित है या नहीं।
सार डेटाबफ़र <टी>
संकीर्ण (लंबा आकार)
एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जिसका आकार दिए गए मान पर सेट है।
सार डेटाबफ़र <टी>
ऑफसेट (लंबा सूचकांक)
एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जो दिए गए सूचकांक से शुरू होती है।
सार डेटाबफ़र <टी>
पढ़ें (टी[] डीएसटी)
इस बफ़र में ऑब्जेक्ट के संदर्भों को गंतव्य सरणी में पढ़ें।
सार डेटाबफ़र <टी>
पढ़ें (टी[] डीएसटी, इंट ऑफसेट, इंट लंबाई)
इस बफ़र में ऑब्जेक्ट के संदर्भों को गंतव्य सरणी में पढ़ें।
सार डेटाबफ़र <टी>
सेटऑब्जेक्ट (टी मान, लंबा सूचकांक)
दिए गए सूचकांक पर दिए गए मान को इस बफ़र में लिखता है।
अमूर्त लंबा
आकार ()
बफ़र का आकार, तत्वों में.
सार डेटाबफ़र <टी>
टुकड़ा (लंबा सूचकांक, लंबा आकार)
एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जो दिए गए सूचकांक और दिए गए आकार से शुरू होती है।
सार डेटाबफ़रविंडो <? डेटाबफ़र <T>> का विस्तार करता है
खिड़की (लंबा आकार)
एक DataBufferWindow बनाता है जो इस बफ़र का आंशिक दृश्य प्रदान करता है।
सार डेटाबफ़र <टी>
लिखें (टी[] स्रोत)
इस बफ़र में स्रोत सरणी में ऑब्जेक्ट के संदर्भ लिखें।
सार डेटाबफ़र <टी>
लिखें (T[] src, int ऑफसेट, int लंबाई)
पूर्णांक सरणियों का उपयोग करते हुए बल्क पुट विधि।

सार्वजनिक तरीके

सार्वजनिक सार आर स्वीकार ( DataStorageVisitor <R> विज़िटर)

इस बफ़र के बैकिंग स्टोरेज का दौरा करता है।

बफ़र कार्यान्वयन प्रदान किए गए विज़िटर को वास्तविक डेटा संग्रहण का संदर्भ वापस भेजने के लिए ज़िम्मेदार है। विज़िटर को सभी संभावित प्रकार के डेटा स्टोरेज को संभालने की ज़रूरत नहीं है और वह केवल स्टोरेज के तरीकों को ओवरराइड कर सकता है जिसमें वह वास्तव में रुचि रखता है। किसी अन्य प्रकार के स्टोरेज के लिए, यह कॉल fallback() पर फ़ॉलबैक हो जाएगी ताकि विज़िटर कुछ सामान्य रूटीन निष्पादित कर सके यदि आवश्यकता है।

पैरामीटर
आगंतुक इस बफ़र के डेटा संग्रहण का दौरा करता है
रिटर्न
  • विज़िटर द्वारा वही मान लौटाया गया

सार्वजनिक सार डेटाबफ़र <टी> कॉपीटू ( डेटाबफ़र <टी> डीएसटी, लंबा आकार)

इस बफ़र में स्रोत सरणी में ऑब्जेक्ट के संदर्भ लिखें।

यदि गंतव्य बफ़र आकार, यानी size > dst.size() से कॉपी करने के लिए अधिक मान हैं, तो कोई मान स्थानांतरित नहीं किया जाता है और एक बफ़रओवरफ़्लो अपवाद फेंक दिया जाता है। दूसरी ओर, यदि स्रोत बफ़र आकार की प्रतिलिपि बनाने के लिए अधिक मान हैं, यानी > src.size() , तो एक बफ़रअंडरफ्लोटएक्सेप्शन फेंक दिया जाता है।

अन्यथा, यह विधि इस बफ़र से n = size मानों को गंतव्य बफ़र में कॉपी करती है।

पैरामीटर
डीएसटी गंतव्य बफ़र जिसमें मानों की प्रतिलिपि बनाई जाती है; यह बफ़र नहीं होना चाहिए
आकार गंतव्य बफ़र पर कॉपी करने के लिए मानों की संख्या
रिटर्न
  • यह बफ़र
फेंकता
अवैध तर्क अपवाद यदि गंतव्य बफ़र यह बफ़र है
ReadOnlyBufferException यदि गंतव्य बफ़र केवल-पढ़ने के लिए है
बफ़रओवरफ़्लो अपवाद यदि गंतव्य बफ़र में पर्याप्त स्थान नहीं है
बफ़रअंडरफ्लो अपवाद यदि स्रोत बफ़र में पर्याप्त मान नहीं हैं

सार्वजनिक सार बूलियन बराबर (ऑब्जेक्ट obj)

डेटा बफ़र्स के बीच समानता की जाँच करता है।

एक डेटा बफ़र किसी अन्य ऑब्जेक्ट के बराबर होता है यदि यह ऑब्जेक्ट समान आकार, प्रकार का एक और DataBuffer है और तत्व समान और समान क्रम में हैं। उदाहरण के लिए:

IntDataBuffer buffer = DataBuffers.of(1, 2, 3);

 assertEquals(buffer, DataBuffers.of(1, 2, 3));  // true
 assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3));  // true, as Integers are equal to ints
 assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0));  // false, different sizes
 assertNotEquals(buffer, DataBuffers.of(1, 3, 2));  // false, different order
 assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L));  // false, different types
 

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

पैरामीटर
ओबीजे इस बफ़र की तुलना करने के लिए ऑब्जेक्ट
रिटर्न
  • यदि यह बफ़र प्रदत्त ऑब्जेक्ट के बराबर है तो सत्य है

सार्वजनिक सार टी getObject (लंबा सूचकांक)

दिए गए सूचकांक पर मान पढ़ता है। महत्वपूर्ण: इस पद्धति का उपयोग गैर-आदिम प्रकार के बफ़र्स तक सीमित होना चाहिए या जब डेटा प्रकार कॉलर द्वारा निश्चित रूप से ज्ञात नहीं होता है। किसी भी अन्य मामले में, इसके आदिम संस्करण के उपयोग को प्राथमिकता दें जो प्रदर्शन में काफी सुधार करेगा (उदाहरण के लिए IntDataBuffer.getInt(idx)

पैरामीटर
अनुक्रमणिका वह सूचकांक जिससे फ्लोट पढ़ा जाएगा
रिटर्न
  • दिए गए सूचकांक पर मूल्य
फेंकता
IndexOutOfBoundsException यदि सूचकांक ऋणात्मक है या बफ़र आकार से छोटा नहीं है

सार्वजनिक सार बूलियन isReadOnly ()

बताता है कि यह बफ़र किसी पहुंच योग्य सरणी द्वारा समर्थित है या नहीं।

रिटर्न
  • सत्य है यदि, और केवल यदि, यह बफ़र केवल-पढ़ने के लिए है

सार्वजनिक सार डेटाबफ़र <टी> संकीर्ण (लंबा आकार)

एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जिसका आकार दिए गए मान पर सेट है।

नया आकार इस बफ़र आकार से बड़ा नहीं होना चाहिए. इस बफ़र की सामग्री में परिवर्तन नए बफ़र में दिखाई देंगे और इसके विपरीत। नया बफ़र केवल-पढ़ने के लिए होगा यदि, और केवल तभी, जब यह बफ़र केवल-पढ़ने के लिए हो।

यह कॉल slice(0, size) के बराबर है

पैरामीटर
आकार इस नये बफ़र का आकार
रिटर्न
  • नया बफ़र
फेंकता
अवैध तर्क अपवाद यदि सूचकांक और/या आकार मान सत्यापन जांच में उत्तीर्ण नहीं होते हैं

सार्वजनिक सार डेटाबफ़र <T> ऑफ़सेट (लंबा सूचकांक)

एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जो दिए गए सूचकांक से शुरू होती है।

सूचकांक इस बफ़र आकार से अधिक नहीं होना चाहिए। इस बफ़र की सामग्री में परिवर्तन नए बफ़र में दिखाई देंगे और इसके विपरीत। नया बफ़र केवल-पढ़ने के लिए होगा यदि, और केवल तभी, जब यह बफ़र केवल-पढ़ने के लिए हो।

यह कॉल slice(index, size() - index) के बराबर है

पैरामीटर
अनुक्रमणिका बनाए गए नए बफ़र के पहले मान का सूचकांक, size()
रिटर्न
  • नया बफ़र
फेंकता
अवैध तर्क अपवाद यदि सूचकांक सत्यापन जांच पास नहीं करता है

सार्वजनिक सार डेटाबफ़र <टी> पढ़ें (टी[] डीएसटी)

इस बफ़र में ऑब्जेक्ट के संदर्भों को गंतव्य सरणी में पढ़ें।

यह विधि इस बफ़र से मानों को दिए गए गंतव्य सरणी में स्थानांतरित करती है। यदि अनुरोध को पूरा करने के लिए बफ़र में आवश्यक से कम मान हैं, अर्थात, यदि dst.length > size() , तो कोई मान स्थानांतरित नहीं किया जाता है और एक बफ़रअंडरफ़्लोएक्सेप्शन फेंक दिया जाता है।

अन्यथा, यह विधि इस बफ़र से n = dst.length मानों को दिए गए सरणी में कॉपी करती है।

पैरामीटर
डीएसटी वह सारणी जिसमें मान लिखे जाने हैं
रिटर्न
  • यह बफ़र
फेंकता
बफ़रअंडरफ्लो अपवाद यदि इस बफ़र से कॉपी करने के लिए पर्याप्त मान नहीं हैं

सार्वजनिक सार डेटाबफ़र <टी> पढ़ें (टी[] डीएसटी, इंट ऑफ़सेट, इंट लंबाई)

इस बफ़र में ऑब्जेक्ट के संदर्भों को गंतव्य सरणी में पढ़ें।

यह विधि इस बफ़र से मानों को दिए गए गंतव्य सरणी में स्थानांतरित करती है। यदि अनुरोध को पूरा करने के लिए बफ़र में आवश्यक से कम मान हैं, यानी, यदि length > size() , तो कोई मान स्थानांतरित नहीं किया जाता है और एक बफ़रअंडरफ़्लोएक्सेप्शन फेंक दिया जाता है।

अन्यथा, यह विधि इस बफ़र से n = length मानों को दिए गए ऑफसेट से शुरू करके दिए गए सरणी में कॉपी करती है।

पैरामीटर
डीएसटी वह सारणी जिसमें मान लिखे जाने हैं
ओफ़्सेट लिखे जाने वाले पहले मान की सरणी के भीतर ऑफसेट; गैर-नकारात्मक होना चाहिए और dst.length से बड़ा नहीं होना चाहिए
लंबाई दिए गए सरणी में लिखे जाने वाले मानों की अधिकतम संख्या; गैर-नकारात्मक होना चाहिए और dst.length - offset से बड़ा नहीं होना चाहिए
रिटर्न
  • यह बफ़र
फेंकता
बफ़रअंडरफ्लो अपवाद यदि इस बफ़र में लंबाई से कम मान शेष हैं
IndexOutOfBoundsException यदि ऑफसेट और लंबाई मापदंडों पर पूर्व शर्तें लागू नहीं होती हैं

सार्वजनिक सार डेटाबफ़र <टी> सेटऑब्जेक्ट (टी मान, लंबा सूचकांक)

दिए गए सूचकांक पर दिए गए मान को इस बफ़र में लिखता है। महत्वपूर्ण: इस पद्धति का उपयोग गैर-आदिम प्रकार के बफ़र्स तक सीमित होना चाहिए या जब डेटा प्रकार कॉलर द्वारा निश्चित रूप से ज्ञात नहीं होता है। किसी भी अन्य मामले में, इसके आदिम संस्करण के उपयोग को प्राथमिकता दें जो प्रदर्शन में काफी सुधार करेगा (उदाहरण के लिए IntDataBuffer.setInt(idx)

पैरामीटर
कीमत लिखा जाने वाला मान
अनुक्रमणिका वह सूचकांक जिस पर मान लिखा जाएगा
रिटर्न
  • यह बफ़र
फेंकता
IndexOutOfBoundsException यदि सूचकांक ऋणात्मक है या बफ़र आकार से छोटा नहीं है
ReadOnlyBufferException यदि यह बफ़र केवल पढ़ने योग्य है

सार्वजनिक सार लंबा आकार ()

बफ़र का आकार, तत्वों में.

उदाहरण के लिए, बाइट बफ़र के मामले में, यह मान इस बफ़र द्वारा रखे जा सकने वाले बाइट्स की संख्या के बराबर है। एक पूर्णांक बफ़र के लिए, यह पूर्णांकों की संख्या के बराबर है, इसलिए इस बफ़र के बाइट्स में size() * Integer.BYTES है।

रिटर्न
  • बफ़र का आकार

सार्वजनिक सार डेटाबफ़र <टी> स्लाइस (लंबा सूचकांक, लंबा आकार)

एक नया बफ़र बनाता है जिसकी सामग्री इस बफ़र की सामग्री का एक साझा अनुवर्ती है, जो दिए गए सूचकांक और दिए गए आकार से शुरू होती है।

सूचकांक और नया आकार इस बफ़र आकार से अधिक नहीं होना चाहिए। इस बफ़र की सामग्री में परिवर्तन नए बफ़र में दिखाई देंगे और इसके विपरीत। नया बफ़र केवल-पढ़ने के लिए होगा यदि, और केवल तभी, जब यह बफ़र केवल-पढ़ने के लिए हो।

पैरामीटर
अनुक्रमणिका बनाए गए नए बफ़र के पहले मान का सूचकांक
आकार इस नए बफ़र का आकार, size()
रिटर्न
  • नया बफ़र
फेंकता
अवैध तर्क अपवाद यदि आकार मान सत्यापन जांच पास नहीं करता है

सार्वजनिक सार डेटाबफ़रविंडो <? डेटाबफ़र <T>> विंडो का विस्तार करता है (लंबा आकार)

एक DataBufferWindow बनाता है जो इस बफ़र का आंशिक दृश्य प्रदान करता है।

बनाई गई विंडो का एक निश्चित आकार होता है और यह इस बफ़र के साथ "slide" कर सकता है ताकि नए बफ़र इंस्टेंस को आवंटित किए बिना डेटा के विभिन्न दृश्य प्रदान किए जा सकें, जैसे offset(long) करता है। जब यह ऑपरेशन बार-बार दोहराया जाता है तो इससे समग्र प्रदर्शन में सुधार होता है। उदाहरण के लिए:

IntDataBuffer bufferA = DataBuffers.ofInts(1024);
 // ... init buffer data
 IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);

 // Return the index of the first occurrence of bufferB in bufferA using a sliding window
 DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
 for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
     if (windowA.slideTo(i).buffer().equals(bufferB)) {
         return i;
     
 }
 }

लौटाया गया ऑब्जेक्ट स्टेटफुल है और थ्रेड-सुरक्षित नहीं है।

पैरामीटर
आकार खिड़की का आकार
रिटर्न
  • एक नई विंडो जो इस बफ़र के सूचकांक 0 से शुरू होती है
फेंकता
असमर्थितऑपरेशन अपवाद यदि इस प्रकार का बफ़र बफ़र विंडोज़ का समर्थन नहीं करता है

सार्वजनिक सार डेटाबफ़र <टी> लिखें (टी[] स्रोत)

इस बफ़र में स्रोत सरणी में ऑब्जेक्ट के संदर्भ लिखें।

यह विधि दिए गए स्रोत सरणी में मानों को इस बफ़र में स्थानांतरित करती है। यदि इस बफ़र की तुलना में स्रोत सरणी में अधिक मान हैं, अर्थात, यदि src.length > size() , तो कोई मान स्थानांतरित नहीं किया जाता है और एक बफ़रओवरफ़्लोएक्सेप्शन फेंक दिया जाता है।

अन्यथा, यह विधि दिए गए सरणी से n = src.length मानों की प्रतिलिपि बनाती है।

पैरामीटर
स्रोत स्रोत सरणी जिससे मान पढ़ा जाना है
रिटर्न
  • यह बफ़र
फेंकता
बफ़रओवरफ़्लो अपवाद यदि स्रोत सरणी में मानों के लिए इस बफ़र में अपर्याप्त स्थान है
ReadOnlyBufferException यदि यह बफ़र केवल पढ़ने योग्य है

सार्वजनिक सार डेटाबफ़र <टी> लिखें (टी[] स्रोत, इंट ऑफसेट, इंट लंबाई)

पूर्णांक सरणियों का उपयोग करते हुए बल्क पुट विधि।

यह विधि दिए गए स्रोत सरणी में मानों को इस बफ़र में स्थानांतरित करती है। यदि इस बफ़र की तुलना में स्रोत सरणी में अधिक मान हैं, यानी, यदि length > size() , तो कोई मान स्थानांतरित नहीं किया जाता है और एक बफ़रओवरफ़्लो अपवाद फेंक दिया जाता है।

अन्यथा, यह विधि दिए गए ऑफसेट से शुरू करके दिए गए सरणी से n = length मानों को इस बफ़र में कॉपी करती है।

पैरामीटर
स्रोत स्रोत सरणी जिससे मान पढ़ा जाना है
ओफ़्सेट पढ़े जाने वाले पहले मान की सरणी के भीतर ऑफसेट; गैर-नकारात्मक होना चाहिए और src.length से बड़ा नहीं होना चाहिए
लंबाई दिए गए सरणी से पढ़े जाने वाले मानों की संख्या; गैर-नकारात्मक होना चाहिए और src.length - offset से बड़ा नहीं होना चाहिए
रिटर्न
  • यह बफ़र
फेंकता
बफ़रओवरफ़्लो अपवाद यदि स्रोत सरणी में मानों के लिए इस बफ़र में अपर्याप्त स्थान है
IndexOutOfBoundsException यदि ऑफसेट और लंबाई मापदंडों पर पूर्व शर्तें लागू नहीं होती हैं
ReadOnlyBufferException यदि यह बफ़र केवल पढ़ने योग्य है