DataBuffer

الواجهة العامة DataBuffer
الفئات الفرعية غير المباشرة المعروفة

حاوية بيانات من نوع معين.

تقوم مثيلات DataBuffer بتعيين مقاطع الذاكرة الأصلية أو الكومة إلى عرض خطي يدعم:

  • فهرسة 64 بت، مما يسمح بالعمل مع مخزن مؤقت أكبر من 231 بايت
  • تخزين الكائنات بجميع أنواعها وليس البدائيات فقط
  • تسمح الأنواع العامة بالعمل مباشرة مع الأنواع المعبأة أيضًا، والتي لا تتطلب أنواعًا صريحة من المخازن المؤقتة كما هو الحال مع مخازن JDK المؤقتة القياسية.
من المهم ملاحظة أنه ليس هناك ما يضمن أن الذاكرة التي يديرها DataBuffer خطية، خاصة عند التعامل مع الأنواع غير البدائية أو المخازن المؤقتة الكبيرة.

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

مجردة <R> R
قبول (زائر DataStorageVisitor <R>)
يزور تخزين الدعم لهذا المخزن المؤقت.
مجردة DataBuffer <T>
CopyTo ( DataBuffer <T> dst، حجم طويل)
اكتب مراجع الكائنات الموجودة في المصفوفة المصدر في هذا المخزن المؤقت.
منطقية مجردة
يساوي (كائن كائن)
التحقق من المساواة بين مخازن البيانات المؤقتة.
مجردة T
getObject (فهرس طويل)
يقرأ القيمة في الفهرس المحدد.
منطقية مجردة
للقراءة فقط ()
يوضح ما إذا كان هذا المخزن المؤقت مدعومًا بمصفوفة يمكن الوصول إليها أم لا.
مجردة DataBuffer <T>
ضيق (حجم طويل)
إنشاء مخزن مؤقت جديد يكون محتواه عبارة عن تسلسل مشترك لمحتوى هذا المخزن المؤقت، ويتم تعيين حجمه على القيمة المحددة.
مجردة DataBuffer <T>
إزاحة (مؤشر طويل)
إنشاء مخزن مؤقت جديد يكون محتواه عبارة عن تسلسل مشترك لمحتوى هذا المخزن المؤقت، بدءًا من الفهرس المحدد.
مجردة DataBuffer <T>
قراءة (T[] التوقيت الصيفي)
اقرأ مراجع الكائنات الموجودة في هذا المخزن المؤقت في المصفوفة الوجهة.
مجردة DataBuffer <T>
قراءة (T[] dst، إزاحة int، طول int)
اقرأ مراجع الكائنات الموجودة في هذا المخزن المؤقت في المصفوفة الوجهة.
مجردة DataBuffer <T>
setObject (قيمة T، مؤشر طويل)
يكتب القيمة المحددة في هذا المخزن المؤقت في الفهرس المحدد.
مجردة طويلة
مقاس ()
حجم المخزن المؤقت، في العناصر.
مجردة DataBuffer <T>
شريحة (مؤشر طويل، حجم طويل)
إنشاء مخزن مؤقت جديد يكون محتواه عبارة عن تسلسل مشترك لمحتوى هذا المخزن المؤقت، بدءًا من الفهرس المحدد وبالحجم المحدد.
مجردة DataBufferWindow <؟ يمتد DataBuffer <T>>
نافذة (حجم طويل)
يقوم بإنشاء DataBufferWindow الذي يوفر عرضًا جزئيًا لهذا المخزن المؤقت.
مجردة DataBuffer <T>
اكتب (T[] src)
اكتب مراجع الكائنات الموجودة في المصفوفة المصدر في هذا المخزن المؤقت.
مجردة DataBuffer <T>
الكتابة (T[] src، إزاحة int، طول int)
طريقة الوضع المجمعة، باستخدام صفائف int.

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

قبول الملخص العام R (زائر DataStorageVisitor <R>)

يزور تخزين الدعم لهذا المخزن المؤقت.

يعد تنفيذ المخزن المؤقت مسؤولاً عن إعادة مرجع إلى تخزين البيانات الفعلي إلى الزائر المقدم. لا يتعين على الزائر التعامل مع جميع أنواع تخزين البيانات الممكنة ويمكنه فقط تجاوز طرق التخزين التي يهتم بها بالفعل. بالنسبة لأي نوع آخر من التخزين، سيرجع هذا الاستدعاء إلى fallback() حتى يتمكن الزائر من تنفيذ بعض الإجراءات العامة إذا ضروري.

حدود
زائر يزور تخزين البيانات من هذا المخزن المؤقت
المرتجعات
  • نفس القيمة التي يعودها الزائر

الملخص العام DataBuffer <T> CopyTo ( DataBuffer <T> dst، حجم طويل)

اكتب مراجع الكائنات الموجودة في المصفوفة المصدر في هذا المخزن المؤقت.

إذا كان هناك قيم أكثر لنسخها من حجم المخزن المؤقت الوجهة، أي size > dst.size() ، فلن يتم نقل أي قيم وسيتم طرح BufferOverflowException. من ناحية أخرى، إذا كان هناك المزيد من القيم لنسخ حجم المخزن المؤقت المصدر، على سبيل المثال > src.size() ، فسيتم طرح BufferUnderfloatException.

بخلاف ذلك، تقوم هذه الطريقة بنسخ قيم n = size من هذا المخزن المؤقت إلى المخزن المؤقت الوجهة.

حدود
التوقيت الصيفي المخزن المؤقت للوجهة الذي يتم نسخ القيم إليه؛ لا يجب أن يكون هذا المخزن المؤقت
مقاس عدد القيم المراد نسخها إلى المخزن المؤقت للوجهة
المرتجعات
  • هذا المخزن المؤقت
رميات
IllegalArgumentException إذا كان المخزن المؤقت للوجهة هو هذا المخزن المؤقت
ReadOnlyBufferException إذا كان المخزن المؤقت الوجهة للقراءة فقط
BufferOverflowException إذا لم تكن هناك مساحة كافية في المخزن المؤقت للوجهة
BufferUnderflowException إذا لم تكن هناك قيم كافية في المخزن المؤقت المصدر

القيمة المنطقية المجردة العامة تساوي (Object obj)

التحقق من المساواة بين مخازن البيانات المؤقتة.

يكون المخزن المؤقت للبيانات مساويًا لكائن آخر إذا كان هذا الكائن عبارة عن DataBuffer آخر بنفس الحجم والنوع والعناصر متساوية وبنفس الترتيب. على سبيل المثال:

IntDataBuffer buffer = DataBuffers.of(1, 2, 3);

 assertEquals(buffer, DataBuffers.of(1, 2, 3));  // true
 assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3));  // true, as Integers are equal to ints
 assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0));  // false, different sizes
 assertNotEquals(buffer, DataBuffers.of(1, 3, 2));  // false, different order
 assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L));  // false, different types
 

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

حدود
obj كائن لمقارنة هذا المخزن المؤقت مع
المرتجعات
  • صحيح إذا كان هذا المخزن المؤقت يساوي الكائن المقدم

الملخص العام T getObject (فهرس طويل)

يقرأ القيمة في الفهرس المحدد. هام: يجب أن يقتصر استخدام هذه الطريقة على المخازن المؤقتة للأنواع غير البدائية أو عندما لا يكون نوع البيانات معروفًا بشكل قاطع بواسطة المتصل. في أي حالة أخرى، يفضل استخدام متغيره البدائي الذي سيؤدي إلى تحسين الأداء بشكل ملحوظ (على سبيل المثال IntDataBuffer.getInt(idx)

حدود
فِهرِس الفهرس الذي سيتم قراءة التعويم منه
المرتجعات
  • القيمة في الفهرس المحدد
رميات
IndexOutOfBoundsException إذا كان الفهرس سالبًا أو ليس أصغر من حجم المخزن المؤقت

الملخص المنطقي العام هو للقراءة فقط ()

يوضح ما إذا كان هذا المخزن المؤقت مدعومًا بمصفوفة يمكن الوصول إليها أم لا.

المرتجعات
  • صحيح إذا، وفقط إذا، كان هذا المخزن المؤقت للقراءة فقط

ملخص عام DataBuffer <T> ضيق (حجم طويل)

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

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

هذه المكالمة تعادل slice(0, size)

حدود
مقاس حجم هذا المخزن المؤقت الجديد
المرتجعات
  • المخزن المؤقت الجديد
رميات
IllegalArgumentException إذا لم تنجح قيم الفهرس و/أو الحجم في اجتياز اختبارات التحقق من الصحة

إزاحة DataBuffer <T> العامة (فهرس طويل)

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

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

هذه المكالمة تعادل slice(index, size() - index)

حدود
فِهرِس يجب ألا يكون فهرس القيمة الأولى للمخزن المؤقت الجديد الذي تم إنشاؤه أكبر من size()
المرتجعات
  • المخزن المؤقت الجديد
رميات
IllegalArgumentException إذا لم يجتاز الفهرس عمليات التحقق من الصحة

قراءة DataBuffer العامة <T> (T[] dst)

اقرأ مراجع الكائنات الموجودة في هذا المخزن المؤقت في المصفوفة الوجهة.

تقوم هذه الطريقة بنقل القيم من هذا المخزن المؤقت إلى مصفوفة الوجهة المحددة. إذا كان هناك قيم أقل في المخزن المؤقت مما هو مطلوب لتلبية الطلب، أي إذا كان dst.length > size() ، فلن يتم نقل أي قيم وسيتم طرح BufferUnderflowException.

بخلاف ذلك، تقوم هذه الطريقة بنسخ قيم n = dst.length من هذا المخزن المؤقت إلى المصفوفة المحددة.

حدود
التوقيت الصيفي المصفوفة التي سيتم كتابة القيم فيها
المرتجعات
  • هذا المخزن المؤقت
رميات
BufferUnderflowException إذا لم تكن هناك قيم كافية للنسخ من هذا المخزن المؤقت

قراءة DataBuffer العامة <T> (T[] dst، int offset، int length)

اقرأ مراجع الكائنات الموجودة في هذا المخزن المؤقت في المصفوفة الوجهة.

تقوم هذه الطريقة بنقل القيم من هذا المخزن المؤقت إلى مصفوفة الوجهة المحددة. إذا كان هناك قيم أقل في المخزن المؤقت مما هو مطلوب لتلبية الطلب، أي إذا كان length > size() ، فلن يتم نقل أي قيم ويتم طرح BufferUnderflowException.

بخلاف ذلك، تقوم هذه الطريقة بنسخ قيم n = length من هذا المخزن المؤقت إلى المصفوفة المحددة بدءًا من الإزاحة المحددة.

حدود
التوقيت الصيفي المصفوفة التي سيتم كتابة القيم فيها
إزاحة الإزاحة ضمن مصفوفة القيمة الأولى المراد كتابتها؛ يجب أن يكون غير سالب وألا يزيد حجمه عن dst.length
طول الحد الأقصى لعدد القيم المراد كتابتها في المصفوفة المحددة؛ يجب أن تكون غير سالبة ولا يزيد حجمها عن dst.length - offset
المرتجعات
  • هذا المخزن المؤقت
رميات
BufferUnderflowException إذا كان هناك أقل من قيم الطول المتبقية في هذا المخزن المؤقت
IndexOutOfBoundsException إذا لم يتم الالتزام بالشروط المسبقة الخاصة بمعلمات الإزاحة والطول

الملخص العام DataBuffer <T> setObject (قيمة T، مؤشر طويل)

يكتب القيمة المحددة في هذا المخزن المؤقت في الفهرس المحدد. هام: يجب أن يقتصر استخدام هذه الطريقة على المخازن المؤقتة للأنواع غير البدائية أو عندما لا يكون نوع البيانات معروفًا بشكل قاطع بواسطة المتصل. في أي حالة أخرى، يفضل استخدام متغيره البدائي الذي سيؤدي إلى تحسين الأداء بشكل ملحوظ (على سبيل المثال IntDataBuffer.setInt(idx)

حدود
قيمة القيمة المراد كتابتها
فِهرِس الفهرس الذي سيتم كتابة القيمة عليه
المرتجعات
  • هذا المخزن المؤقت
رميات
IndexOutOfBoundsException إذا كان الفهرس سالبًا أو ليس أصغر من حجم المخزن المؤقت
ReadOnlyBufferException إذا كان هذا المخزن المؤقت للقراءة فقط

الملخص العام طويل الحجم ()

حجم المخزن المؤقت، في العناصر.

على سبيل المثال، في حالة وجود مخزن مؤقت للبايت، فإن هذه القيمة تساوي عدد البايتات التي يمكن أن يحتفظ بها هذا المخزن المؤقت. بالنسبة للمخزن المؤقت للأعداد الصحيحة، فهو يساوي عدد الأعداد الصحيحة، وبالتالي فإن الحجم بالبايت لهذا المخزن المؤقت هو size() * Integer.BYTES .

المرتجعات
  • حجم المخزن المؤقت

شريحة DataBuffer <T> مجردة عامة (فهرس طويل، حجم طويل)

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

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

حدود
فِهرِس فهرس القيمة الأولى للمخزن المؤقت الجديد الذي تم إنشاؤه
مقاس يجب ألا يكون حجم هذا المخزن المؤقت الجديد أكبر من size()
المرتجعات
  • المخزن المؤقت الجديد
رميات
IllegalArgumentException إذا لم تنجح قيمة الحجم في اجتياز عمليات التحقق من الصحة

ملخص عام DataBufferWindow يمتد نافذة DataBuffer <T>> (حجم طويل)

يقوم بإنشاء DataBufferWindow الذي يوفر عرضًا جزئيًا لهذا المخزن المؤقت.

النافذة التي تم إنشاؤها لها حجم ثابت ويمكنها "slide" على طول هذا المخزن المؤقت لتوفير طرق عرض مختلفة للبيانات دون تخصيص مثيل مخزن مؤقت جديد، كما يفعل offset(long) . يؤدي هذا إلى تحسين الأداء العام عند تكرار هذه العملية بشكل متكرر. على سبيل المثال:

IntDataBuffer bufferA = DataBuffers.ofInts(1024);
 // ... init buffer data
 IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);

 // Return the index of the first occurrence of bufferB in bufferA using a sliding window
 DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
 for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
     if (windowA.slideTo(i).buffer().equals(bufferB)) {
         return i;
     
 }
 }

الكائن الذي تم إرجاعه ذو حالة وليس آمنًا لمؤشر الترابط.

حدود
مقاس حجم النافذة
المرتجعات
  • نافذة جديدة تبدأ عند الفهرس 0 لهذا المخزن المؤقت
رميات
UnsupportedOperationException إذا كان هذا النوع من المخزن المؤقت لا يدعم نوافذ المخزن المؤقت

كتابة DataBuffer <T> العامة (T[] src)

اكتب مراجع الكائنات الموجودة في المصفوفة المصدر في هذا المخزن المؤقت.

تقوم هذه الطريقة بنقل القيم الموجودة في مصفوفة المصدر المحددة إلى هذا المخزن المؤقت. إذا كانت هناك قيم في المصفوفة المصدر أكثر من تلك الموجودة في هذا المخزن المؤقت، أي إذا كان src.length > size() ، فلن يتم نقل أي قيم وسيتم طرح BufferOverflowException.

بخلاف ذلك، تقوم هذه الطريقة بنسخ قيم n = src.length من المصفوفة المحددة.

حدود
src المصفوفة المصدرية التي سيتم قراءة القيم منها
المرتجعات
  • هذا المخزن المؤقت
رميات
BufferOverflowException إذا لم يكن هناك مساحة كافية في هذا المخزن المؤقت للقيم الموجودة في الصفيف المصدر
ReadOnlyBufferException إذا كان هذا المخزن المؤقت للقراءة فقط

كتابة DataBuffer الملخص العام <T> (T[] src، int offset، int length)

طريقة الوضع المجمعة، باستخدام صفائف int.

تقوم هذه الطريقة بنقل القيم الموجودة في مصفوفة المصدر المحددة إلى هذا المخزن المؤقت. إذا كانت هناك قيم في المصفوفة المصدر أكثر من تلك الموجودة في هذا المخزن المؤقت، أي إذا كان length > size() ، فلن يتم نقل أي قيم وسيتم طرح BufferOverflowException.

بخلاف ذلك، تقوم هذه الطريقة بنسخ قيم n = length من المصفوفة المحددة إلى هذا المخزن المؤقت، بدءًا من الإزاحة المحددة.

حدود
src المصفوفة المصدرية التي سيتم قراءة القيم منها
إزاحة الإزاحة ضمن مصفوفة القيمة الأولى المراد قراءتها؛ يجب أن تكون غير سالبة ولا يزيد حجمها عن src.length
طول عدد القيم التي سيتم قراءتها من المصفوفة المحددة؛ يجب أن تكون غير سالبة ولا يزيد حجمها عن src.length - offset
المرتجعات
  • هذا المخزن المؤقت
رميات
BufferOverflowException إذا لم يكن هناك مساحة كافية في هذا المخزن المؤقت للقيم الموجودة في الصفيف المصدر
IndexOutOfBoundsException إذا لم يتم الالتزام بالشروط المسبقة الخاصة بمعلمات الإزاحة والطول
ReadOnlyBufferException إذا كان هذا المخزن المؤقت للقراءة فقط