الفئات الفرعية غير المباشرة المعروفة Bfloat16Layout ، BoolLayout ، BooleanDataLayout <S يمتد DataBuffer <?>>، ByteDataLayout <S يمتد DataBuffer <?>>، DoubleDataLayout <S يمتد DataBuffer <?>>، Float16Layout ، FloatDataLayout <S يمتد DataBuffer <?>>، IntDataLayout <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)); } }; }
الأساليب العامة
مجردة DataBuffer <T> | تنطبق على (S المخزن المؤقت) قم بتطبيق هذا التخطيط على المخزن المؤقت المقدم. |
مجردة T | readObject (المخزن المؤقت S، الفهرس الطويل) يقرأ قيم n = scale() من المخزن المؤقت في الفهرس المحدد ويعيدها كقيمة واحدة في نوع المستخدم. |
كثافة العمليات مجردة | حجم () يشير إلى عدد قيم المخزن المؤقت المطلوبة لتمثيل قيمة مستخدم واحدة، الافتراضي هو 1. |
الفراغ المجرد | كائن الكتابة (المخزن المؤقت S، قيمة T، الفهرس الطويل) يكتب قيمة مستخدم في المخزن المؤقت في الفهرس المحدد بعد تحويله إلى نوع المخزن المؤقت. |
الأساليب العامة
الملخص العام DataBuffer <T> ApplyTo (S buffer)
قم بتطبيق هذا التخطيط على المخزن المؤقت المقدم.
إن مثيل DataBuffer
الذي تم إرجاعه هو مجرد غلاف للمخزن المؤقت الأصلي ولا يحتوي على مساحة تخزين احتياطية خاصة به.
حدود
عازلة | المخزن المؤقت الهدف لتطبيق هذا التخطيط عليه |
---|
المرتجعات
- مخزن مؤقت مع هذا التخطيط
مجردة عامة T readObject (S buffer، مؤشر طويل)
يقرأ قيم n = scale()
من المخزن المؤقت في الفهرس المحدد ويعيدها كقيمة واحدة في نوع المستخدم.
تقع على عاتق منفذي هذه الواجهة مسؤولية قراءة القيمة التي سيتم تحويلها من المخزن المؤقت المحدد، باستخدام الطريقة الأكثر ملاءمة. على سبيل المثال، بالنسبة للتخطيط الذي يحول رقمًا واحدًا long
إلى BigInteger
،
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }
index
إلى موضع بداية التسلسل الذي سيتم قراءته من المخزن المؤقت. حدود
عازلة | المخزن المؤقت للقراءة منه |
---|---|
فِهرِس | موقف المخزن المؤقت للقراءة في المخزن المؤقت |
المرتجعات
- القيمة المحولة
مقياس كثافة الملخص العام ()
يشير إلى عدد قيم المخزن المؤقت المطلوبة لتمثيل قيمة مستخدم واحدة، الافتراضي هو 1.
يجب أن يكون المقياس موجبًا ويجب أن يكون عددًا صحيحًا، مما يعني أنه لا يمكن استخدام قيمة مخزن مؤقت واحدة في المخزن المؤقت لتمثيل أكثر من قيمة مستخدم واحدة.
كائن كتابة باطلة مجردة عامة (S buffer، T value، long Index)
يكتب قيمة مستخدم في المخزن المؤقت في الفهرس المحدد بعد تحويله إلى نوع المخزن المؤقت.
تقع على عاتق منفذي هذه الواجهة مسؤولية كتابة القيمة المحولة إلى المخزن المؤقت المحدد قبل عودة هذا الاستدعاء، وذلك باستخدام الطريقة الأكثر ملاءمة. على سبيل المثال، بالنسبة للتخطيط الذي يقوم بتحويل BigInteger
إلى long
واحد،
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
إلى موضع بداية التسلسل المراد كتابته في المخزن المؤقت. حدود
عازلة | المخزن المؤقت للكتابة إليه |
---|---|
قيمة | القيمة في نوع المستخدم للتحويل والكتابة |
فِهرِس | الفهرس الموجود في المخزن المؤقت حيث يجب كتابة القيمة المحولة |