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>
applicationTo (بافر S)
این طرح را در بافر ارائه شده اعمال کنید.
چکیده تی
readObject (بافر S، نمایه طولانی)
مقادیر n = scale() را از بافر در شاخص داده شده می خواند و آنها را به عنوان یک مقدار واحد در نوع کاربر برمی گرداند.
انتزاعی
مقیاس ()
تعداد مقادیر بافر مورد نیاز برای نمایش یک مقدار کاربر را نشان می دهد، پیش فرض 1 است.
خلأ انتزاعی
writeObject (بافر S، مقدار T، شاخص طولانی)
پس از تبدیل آن به نوع بافر، یک مقدار کاربری را در بافر در شاخص داده شده می نویسد.

روش های عمومی

DataBuffer انتزاعی عمومی <T> applyTo (S buffer)

این طرح را در بافر ارائه شده اعمال کنید.

نمونه DataBuffer بازگشتی صرفاً یک بسته‌بندی به بافر اصلی است و ذخیره‌سازی پشتیبان خودش را ندارد.

مولفه های
بافر بافر هدف برای اعمال این طرح
برمی گرداند
  • یک بافر با این طرح

چکیده عمومی T readObject (بافر S، نمایه طولانی)

مقادیر n = scale() را از بافر در شاخص داده شده می خواند و آنها را به عنوان یک مقدار واحد در نوع کاربر برمی گرداند.

این وظیفه پیاده‌کننده‌های این رابط است که با استفاده از مناسب‌ترین روش، مقدار مورد نظر را از بافر داده شده بخوانند. برای مثال، برای طرح‌بندی که یک long به یک BigInteger تبدیل می‌کند،

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
اگر یک مقدار کاربر منفرد بیش از یک مقدار بافر مقیاس شود، index موقعیت شروع دنباله‌ای را که باید از بافر خوانده شود نشان می‌دهد.

مولفه های
بافر بافر برای خواندن
فهرست مطالب موقعیت بافر برای خواندن در بافر
برمی گرداند
  • مقدار تبدیل شده

مقیاس عمومی انتزاعی عمومی ()

تعداد مقادیر بافر مورد نیاز برای نمایش یک مقدار کاربر را نشان می دهد، پیش فرض 1 است.

مقیاس باید مثبت باشد و باید یک عدد صحیح باشد، به این معنی که یک مقدار بافر در یک بافر نمی تواند برای نمایش بیش از یک مقدار کاربر استفاده شود.

انتزاع عمومی void writeObject (بافر S، مقدار T، نمایه طولانی)

پس از تبدیل آن به نوع بافر، یک مقدار کاربری را در بافر در شاخص داده شده می نویسد.

این وظیفه پیاده‌کننده‌های این رابط است که قبل از بازگشت این فراخوانی، با استفاده از مناسب‌ترین روش، مقدار تبدیل شده را به بافر داده شده بنویسند. به عنوان مثال، برای طرحی که یک index BigInteger را به یک عدد long و

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
تبدیل می‌کند.

مولفه های
بافر بافر برای نوشتن
ارزش مقدار در کاربر برای تبدیل و نوشتن تایپ کنید
فهرست مطالب ایندکس در بافر که در آن مقدار تبدیل شده باید نوشته شود