زیر کلاس های غیر مستقیم شناخته شده Bfloat16Layout ، BoolLayout ، BooleanDataLayout <S گسترش DataBuffer <?>>، ByteDataLayout <S گسترش DataBuffer <?>>، DoubleDataLayout <S گسترش DataBuffer <?>>، Float16Layout ، FloatDataLayout <S Extends DataBuffer < S ? DataBuffer <?>>، LongDataLayout <S گسترش DataBuffer <?>>، ShortDataLayout <S گسترش DataBuffer <?>>، StringLayout |
داده های ذخیره شده در بافر را به یک نوع معین تبدیل می کند.
نمونه های 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، نمایه طولانی)
پس از تبدیل آن به نوع بافر، یک مقدار کاربری را در بافر در شاخص داده شده می نویسد.
این وظیفه پیادهکنندههای این رابط است که قبل از بازگشت این فراخوانی، با استفاده از مناسبترین روش، مقدار تبدیل شده را به بافر داده شده بنویسند. به عنوان مثال، برای یک طرح بندی که یک BigInteger
را به یک long
تبدیل می کند،
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
موقعیت شروع دنباله ای را که باید در بافر نوشته شود را نشان می دهد. پارامترها
بافر | بافر برای نوشتن |
---|---|
ارزش | مقدار در کاربر برای تبدیل و نوشتن تایپ کنید |
شاخص | ایندکس در بافر که در آن مقدار تبدیل شده باید نوشته شود |