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));
         }
     };
 }
 

الأساليب العامة

مجردة 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، قيمة T، فهرس طويل)

يكتب قيمة مستخدم في المخزن المؤقت في الفهرس المحدد بعد تحويله إلى نوع المخزن المؤقت.

تقع على عاتق منفذي هذه الواجهة مسؤولية كتابة القيمة المحولة إلى المخزن المؤقت المحدد قبل عودة هذا الاستدعاء، وذلك باستخدام الطريقة الأكثر ملاءمة. على سبيل المثال، بالنسبة للتخطيط الذي يقوم بتحويل BigInteger إلى

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
long واحد، إذا تم قياس قيمة مستخدم واحد عبر أكثر من قيم المخزن المؤقت، يشير index إلى موضع بداية التسلسل المراد كتابته في المخزن المؤقت.

حدود
متعادل المخزن المؤقت للكتابة إليه
قيمة القيمة في نوع المستخدم للتحويل والكتابة
فِهرِس الفهرس الموجود في المخزن المؤقت حيث يجب كتابة القيمة المحولة