DataLayout

পাবলিক ইন্টারফেস 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));
         }
     };
 }
 

পাবলিক পদ্ধতি

বিমূর্ত ডেটাবাফার <T>
আবেদন করতে (এস বাফার)
প্রদত্ত বাফারে এই লেআউটটি প্রয়োগ করুন।
বিমূর্ত টি
রিডঅবজেক্ট (এস বাফার, দীর্ঘ সূচক)
প্রদত্ত সূচকে বাফার থেকে n = scale() মানগুলি পড়ে এবং ব্যবহারকারীর প্রকারে একটি একক মান হিসাবে সেগুলি ফেরত দেয়।
বিমূর্ত int
স্কেল ()
একটি একক ব্যবহারকারীর মান উপস্থাপন করতে প্রয়োজনীয় বাফার মানগুলির সংখ্যা নির্দেশ করে, ডিফল্ট হল 1।
বিমূর্ত শূন্যতা
writeObject (S বাফার, T মান, দীর্ঘ সূচক)
বাফার টাইপে রূপান্তর করার পরে প্রদত্ত সূচকে বাফারে একটি ব্যবহারকারীর মান লেখে।

পাবলিক পদ্ধতি

সর্বজনীন বিমূর্ত DataBuffer <T> applyTo (S বাফার)

প্রদত্ত বাফারে এই লেআউটটি প্রয়োগ করুন।

ফিরে আসা DataBuffer দৃষ্টান্তটি কেবল আসল বাফারের একটি মোড়ক এবং এর নিজস্ব কোনো ব্যাকিং স্টোরেজ নেই।

পরামিতি
বাফার এই লেআউটটি প্রয়োগ করতে লক্ষ্য বাফার
রিটার্নস
  • এই লেআউট সহ একটি বাফার

সর্বজনীন বিমূর্ত T readObject (S বাফার, দীর্ঘ সূচক)

প্রদত্ত সূচকে বাফার থেকে n = scale() মানগুলি পড়ে এবং ব্যবহারকারীর প্রকারে একটি একক মান হিসাবে সেগুলি ফেরত দেয়।

সবচেয়ে উপযুক্ত পদ্ধতি ব্যবহার করে প্রদত্ত বাফার থেকে রূপান্তরিত করা মানটি পড়া এই ইন্টারফেসের বাস্তবায়নকারীদের দায়িত্ব। উদাহরণস্বরূপ, একটি লেআউটের জন্য যা একটি একক long একটি BigInteger এ রূপান্তর করে ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
যদি একটি একক ব্যবহারকারীর মান একাধিক বাফার মানের উপর স্কেল করে, তাহলে index বাফার থেকে পড়তে হবে এমন ক্রমটির শুরুর অবস্থান নির্দেশ করে।

পরামিতি
বাফার বাফার থেকে পড়তে
সূচক বাফারে পড়ার জন্য বাফারের অবস্থান
রিটার্নস
  • রূপান্তরিত মান

পাবলিক বিমূর্ত int স্কেল ()

একটি একক ব্যবহারকারীর মান উপস্থাপন করতে প্রয়োজনীয় বাফার মানগুলির সংখ্যা নির্দেশ করে, ডিফল্ট হল 1।

স্কেল অবশ্যই ধনাত্মক হতে হবে এবং অবশ্যই একটি পূর্ণসংখ্যা হতে হবে, যার অর্থ একটি বাফারে একটি একক বাফার মান একাধিক ব্যবহারকারীর মান উপস্থাপন করতে ব্যবহার করা যাবে না।

সর্বজনীন বিমূর্ত অকার্যকর লিখিত বস্তু (এস বাফার, টি মান, দীর্ঘ সূচক)

বাফার টাইপে রূপান্তর করার পরে প্রদত্ত সূচকে বাফারে একটি ব্যবহারকারীর মান লেখে।

এই ইন্টারফেসের বাস্তবায়নকারীর দায়িত্ব হল প্রদত্ত বাফারে রূপান্তরিত মান লেখার আগে এই কলটি সবচেয়ে উপযুক্ত পদ্ধতি ব্যবহার করে রিটার্ন করা। উদাহরণস্বরূপ, একটি BigInteger একটি একক long ,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
এ রূপান্তরিত একটি বিন্যাসের জন্য যদি একটি একক ব্যবহারকারীর মান একাধিক বাফার মানের উপর স্কেল করে, তাহলে index বাফারে লেখার ক্রমটির শুরুর অবস্থান নির্দেশ করে।

পরামিতি
বাফার লিখতে বাফার
মান রূপান্তর এবং লিখতে ব্যবহারকারীর প্রকারের মান
সূচক বাফারে সূচক যেখানে রূপান্তরিত মান লিখতে হবে