DataLayout

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

बफ़र में संग्रहीत डेटा को किसी दिए गए प्रकार में परिवर्तित करता है।

DataLayout उदाहरणों का उपयोग DataBuffer के डेटा को संग्रहीत करने और पढ़ने के लिए एक कस्टम प्रारूप को परिभाषित करने के लिए किया जाता है। वे बफ़र में संग्रहीत डेटा के प्रकार ( बफ़र प्रकार) और अंतिम उपयोगकर्ता द्वारा हेरफेर किए गए डेटा के प्रकार ( उपयोगकर्ता प्रकार) के बीच एक पृथक्करण परत प्रदान करते हैं।

चूँकि लिखे या पढ़े गए प्रत्येक मान के लिए रूपांतरण विधियाँ लागू की जाती हैं, डेटा लेआउट के साथ काम करने से प्रदर्शन पर नकारात्मक प्रभाव पड़ सकता है, इसलिए जब भी संभव हो सीधे आदिम प्रकारों का उपयोग करना पसंद किया जाना चाहिए।

अपरिवर्तनीय डेटा लेआउट को लागू करने की भी सिफारिश की जाती है ताकि उनमें से प्रत्येक के लिए एक नया उदाहरण पुनः आवंटित किए बिना उन्हें कई बफ़र्स पर फिर से लागू किया जा सके। उदाहरण के लिए:

 class BigIntegerBufferAllocator {

     public DataBuffer<BigInteger> allocate(long size) {
         return LAYOUT.applyTo(DataBuffers.ofLongs(size * LAYOUT.scale()));  // scale is 1 by default
     }

     private static final DataLayout<LongDataBuffer, BigInteger> LAYOUT = new DataLayout<LongDataBuffer, BigInteger>() {

         @Override
         public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
             buffer.setLong(value.longValue(), index);
         }

         @Override
         public BigInteger readObject(LongDataBuffer buffer, long index) {
             return BigInteger.valueOf(buffer.getLong(index));
         }
     };
 }
 

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

सार डेटाबफ़र <टी>
लागू करें (एस बफर)
इस लेआउट को दिए गए बफ़र पर लागू करें।
सार टी
रीडऑब्जेक्ट (एस बफर, लंबी अनुक्रमणिका)
दिए गए इंडेक्स पर बफर से n = scale() मान पढ़ता है और उन्हें उपयोगकर्ता प्रकार में एकल मान के रूप में लौटाता है।
सार इंट
पैमाना ()
इंगित करता है कि एकल उपयोगकर्ता मान का प्रतिनिधित्व करने के लिए आवश्यक बफर मानों की संख्या, डिफ़ॉल्ट 1 है।
अमूर्त शून्य
राइटऑब्जेक्ट (एस बफर, टी वैल्यू, लॉन्ग इंडेक्स)
किसी उपयोगकर्ता मान को बफ़र प्रकार में परिवर्तित करने के बाद दिए गए इंडेक्स पर बफ़र में लिखता है।

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

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

इस लेआउट को दिए गए बफ़र पर लागू करें।

लौटाया गया DataBuffer इंस्टेंस मूल बफ़र का केवल एक आवरण है और उसका अपना कोई बैकिंग स्टोरेज नहीं है।

पैरामीटर
बफर इस लेआउट को लागू करने के लिए लक्ष्य बफ़र
रिटर्न
  • इस लेआउट के साथ एक बफ़र

सार्वजनिक सार टी रीडऑब्जेक्ट (एस बफर, लंबी अनुक्रमणिका)

दिए गए इंडेक्स पर बफर से n = scale() मान पढ़ता है और उन्हें उपयोगकर्ता प्रकार में एकल मान के रूप में लौटाता है।

यह इस इंटरफ़ेस के कार्यान्वयनकर्ताओं की जिम्मेदारी है कि वे सबसे उपयुक्त विधि का उपयोग करके दिए गए बफर से परिवर्तित किए जाने वाले मूल्य को पढ़ें। उदाहरण के लिए, एक ऐसे लेआउट के लिए जो एक long BigInteger में परिवर्तित करता है,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
यदि एक एकल उपयोगकर्ता मान एक से अधिक बफर मानों पर स्केल करता है, index बफर से पढ़े जाने वाले अनुक्रम की प्रारंभिक स्थिति को इंगित करता है।

पैरामीटर
बफर पढ़ने के लिए बफ़र
अनुक्रमणिका बफ़र में पढ़ने के लिए बफ़र की स्थिति
रिटर्न
  • परिवर्तित मूल्य

सार्वजनिक सार इंट स्केल ()

इंगित करता है कि एकल उपयोगकर्ता मान का प्रतिनिधित्व करने के लिए आवश्यक बफर मानों की संख्या, डिफ़ॉल्ट 1 है।

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

सार्वजनिक सार शून्य राइटऑब्जेक्ट (एस बफर, टी मान, लंबा सूचकांक)

किसी उपयोगकर्ता मान को बफ़र प्रकार में परिवर्तित करने के बाद दिए गए इंडेक्स पर बफ़र में लिखता है।

यह इस इंटरफ़ेस के कार्यान्वयनकर्ताओं की ज़िम्मेदारी है कि वे सबसे उपयुक्त विधि का उपयोग करके, इस कॉल रिटर्न से पहले दिए गए बफर में परिवर्तित मान लिखें। उदाहरण के लिए, एक BigInteger एक long में परिवर्तित करने वाले लेआउट के लिए,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
यदि एक एकल उपयोगकर्ता मान एक से अधिक बफ़र मानों पर स्केल करता है, index बफ़र पर लिखे जाने वाले अनुक्रम की प्रारंभिक स्थिति को इंगित करता है।

पैरामीटर
बफर लिखने के लिए बफ़र
कीमत कनवर्ट करने और लिखने के लिए उपयोगकर्ता प्रकार में मान
अनुक्रमणिका बफ़र में अनुक्रमणिका जहाँ परिवर्तित मान लिखा जाना चाहिए