DataBuffer

رابط عمومی DataBuffer
زیر کلاس های غیر مستقیم شناخته شده

محفظه ای از داده ها از نوع خاصی.

نمونه‌هایی از DataBuffer بخش‌های حافظه بومی یا پشته‌ای را به نمای خطی نگاشت می‌کنند که پشتیبانی می‌کند:

  • نمایه سازی 64 بیتی، اجازه کار با بافر بزرگتر از 231 بایت را می دهد
  • ذخیره سازی شی از هر نوع و نه تنها اولیه
  • انواع عمومی امکان کار مستقیم با انواع جعبه‌دار را نیز فراهم می‌کند، که مانند بافرهای استاندارد JDK به انواع بافر صریح نیاز ندارد.
توجه به این نکته مهم است که هیچ تضمینی وجود ندارد که حافظه مدیریت شده توسط DataBuffer خطی ​​باشد، به خصوص زمانی که با انواع غیر ابتدایی یا بافرهای بزرگ سروکار داریم.

روش های عمومی

چکیده <R> R
قبول (بازدیدکننده DataStorageVisitor <R>)
از حافظه پشتیبان این بافر بازدید می کند.
داده بافر انتزاعی <T>
copyTo ( DataBuffer <T> dst، اندازه طولانی)
ارجاعات اشیاء موجود در آرایه منبع را در این بافر بنویسید.
بولی انتزاعی
برابر است (object obj)
برابری بین بافرهای داده را بررسی می کند.
چکیده تی
getObject (شاخص طولانی)
مقدار را در شاخص داده شده می خواند.
بولی انتزاعی
isReadOnly ()
نشان می دهد که آیا این بافر توسط یک آرایه قابل دسترسی پشتیبانی می شود یا خیر.
داده بافر انتزاعی <T>
باریک (اندازه بلند)
یک بافر جدید ایجاد می کند که محتوای آن دنباله ای مشترک از محتوای این بافر است که اندازه آن روی مقدار داده شده تنظیم شده است.
داده بافر انتزاعی <T>
افست (شاخص بلند)
یک بافر جدید ایجاد می‌کند که محتوای آن دنباله‌ای مشترک از محتوای این بافر است که از شاخص داده شده شروع می‌شود.
داده بافر انتزاعی <T>
خواندن (T[] dst)
ارجاعات اشیاء در این بافر را در آرایه مقصد بخوانید.
داده بافر انتزاعی <T>
خواندن (T[] dst، int offset، int طول)
ارجاعات اشیاء در این بافر را در آرایه مقصد بخوانید.
داده بافر انتزاعی <T>
setObject (مقدار T، شاخص طولانی)
مقدار داده شده را در این بافر در شاخص داده شده می نویسد.
انتزاعی طولانی
اندازه ()
اندازه بافر، بر حسب عناصر
داده بافر انتزاعی <T>
برش (شاخص بلند، اندازه بلند)
یک بافر جدید ایجاد می کند که محتوای آن دنباله ای مشترک از محتوای این بافر است که از شاخص داده شده و اندازه مشخص شده شروع می شود.
چکیده DataBufferWindow <? DataBuffer <T>> را گسترش می دهد
پنجره (اندازه بلند)
یک DataBufferWindow ایجاد می کند که نمای جزئی از این بافر را ارائه می دهد.
داده بافر انتزاعی <T>
نوشتن (T[] src)
ارجاعات اشیاء موجود در آرایه منبع را در این بافر بنویسید.
داده بافر انتزاعی <T>
نوشتن (T[] src، int offset، int طول)
روش قرار دادن انبوه، با استفاده از آرایه های int.

روش های عمومی

انتزاع عمومی R قبول (بازدیدکننده DataStorageVisitor <R>)

از حافظه پشتیبان این بافر بازدید می کند.

اجرای بافر مسئول ارسال یک مرجع به ذخیره سازی داده واقعی به بازدید کننده ارائه شده است. بازدیدکننده مجبور نیست تمام انواع ذخیره‌سازی داده‌های ممکن را مدیریت کند و می‌تواند تنها روش‌هایی را برای ذخیره‌سازی مورد علاقه خود لغو کند. برای هر نوع ذخیره‌سازی دیگری، این فراخوانی به fallback() بازگشت می‌کند، بنابراین بازدیدکننده می‌تواند برخی از روال‌های عمومی را اجرا کند. مورد نیاز است.

پارامترها
بازدید کننده از ذخیره سازی داده های این بافر بازدید می کند
برمی گرداند
  • همان مقدار بازگردانده شده توسط بازدید کننده

چکیده عمومی DataBuffer <T> copyTo ( DataBuffer <T> dst، اندازه طولانی)

ارجاعات اشیاء موجود در آرایه منبع را در این بافر بنویسید.

اگر مقادیر بیشتری نسبت به اندازه بافر مقصد برای کپی وجود داشته باشد، یعنی size > dst.size() ، هیچ مقداری منتقل نمی شود و یک BufferOverflowException پرتاب می شود. از سوی دیگر، اگر مقادیر بیشتری برای کپی کردن از اندازه بافر منبع وجود داشته باشد، به عنوان مثال > src.size() ، یک BufferUnderfloatException پرتاب می شود.

در غیر این صورت، این روش مقادیر n = size از این بافر در بافر مقصد کپی می کند.

پارامترها
dst بافر مقصد که مقادیر در آن کپی می شوند. نباید این بافر باشد
اندازه تعداد مقادیر برای کپی در بافر مقصد
برمی گرداند
  • این بافر
پرتاب می کند
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 اگر شاخص منفی باشد یا کوچکتر از اندازه بافر نباشد

بولی انتزاعی عمومی isReadOnly ()

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

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

داده بافر انتزاعی عمومی <T> باریک (اندازه بلند)

یک بافر جدید ایجاد می کند که محتوای آن دنباله ای مشترک از محتوای این بافر است که اندازه آن روی مقدار داده شده تنظیم شده است.

اندازه جدید نباید بیشتر از این اندازه بافر باشد. تغییرات در محتوای این بافر در بافر جدید قابل مشاهده خواهد بود و بالعکس. بافر جدید فقط خواندنی خواهد بود اگر و فقط اگر این بافر فقط خواندنی باشد.

این تماس معادل slice(0, size) است

پارامترها
اندازه اندازه این بافر جدید
برمی گرداند
  • بافر جدید
پرتاب می کند
IllegalArgumentException اگر مقادیر شاخص و/یا اندازه از بررسی اعتبار سنجی عبور نکنند

داده بافر انتزاعی عمومی <T> افست (شاخص طولانی)

یک بافر جدید ایجاد می‌کند که محتوای آن دنباله‌ای مشترک از محتوای این بافر است که از شاخص داده شده شروع می‌شود.

شاخص نباید بیشتر از این اندازه بافر باشد. تغییرات در محتوای این بافر در بافر جدید قابل مشاهده خواهد بود و بالعکس. بافر جدید فقط خواندنی خواهد بود اگر و فقط اگر این بافر فقط خواندنی باشد.

این فراخوانی معادل slice(index, size() - index)

پارامترها
شاخص شاخص اولین مقدار بافر جدید ایجاد شده، نباید بزرگتر از size() باشد.
برمی گرداند
  • بافر جدید
پرتاب می کند
IllegalArgumentException اگر ایندکس از بررسی اعتبار سنجی عبور نکند

داده بافر انتزاعی عمومی <T> خوانده شده (T[] dst)

ارجاعات اشیاء در این بافر را در آرایه مقصد بخوانید.

این روش مقادیر را از این بافر به آرایه مقصد داده شده منتقل می کند. اگر مقادیر کمتری در بافر از مقدار مورد نیاز برای برآورده کردن درخواست وجود داشته باشد، یعنی اگر dst.length > size() باشد، هیچ مقداری منتقل نمی‌شود و یک BufferUnderflowException پرتاب می‌شود.

در غیر این صورت، این روش مقادیر n = dst.length از این بافر در آرایه داده شده کپی می کند.

پارامترها
dst آرایه ای که قرار است مقادیر در آن نوشته شود
برمی گرداند
  • این بافر
پرتاب می کند
BufferUnderflowException اگر مقادیر کافی برای کپی کردن از این بافر وجود نداشته باشد

داده بافر انتزاعی عمومی <T> خوانده شده (T[] dst، int offset، int length)

ارجاعات اشیاء در این بافر را در آرایه مقصد بخوانید.

این روش مقادیر را از این بافر به آرایه مقصد داده شده منتقل می کند. اگر مقادیر کمتری در بافر از مقدار مورد نیاز برای برآورده کردن درخواست وجود داشته باشد، یعنی اگر length > size() ، هیچ مقداری منتقل نمی شود و یک BufferUnderflowException پرتاب می شود.

در غیر این صورت، این روش مقادیر n = length را از این بافر در آرایه داده شده کپی می کند که از آفست داده شده شروع می شود.

پارامترها
dst آرایه ای که قرار است مقادیر در آن نوشته شود
جبران افست درون آرایه اولین مقداری که باید نوشته شود. باید غیر منفی و بزرگتر از dst.length نباشد
طول حداکثر تعداد مقادیری که باید در آرایه داده شده نوشته شود. باید غیر منفی و بزرگتر از dst.length - offset نباشد
برمی گرداند
  • این بافر
پرتاب می کند
BufferUnderflowException اگر مقادیر کمتر از طول در این بافر باقی مانده باشد
IndexOutOfBoundsException اگر پیش شرط های پارامترهای آفست و طول برقرار نباشد

انتزاعی عمومی DataBuffer <T> setObject (مقدار T، نمایه طولانی)

مقدار داده شده را در این بافر در شاخص داده شده می نویسد. مهم: استفاده از این روش باید به بافرهایی از انواع غیر ابتدایی یا زمانی که نوع داده به طور قطعی توسط تماس گیرنده شناخته نشده باشد، محدود شود. در هر مورد دیگر، استفاده از نوع ابتدایی آن را ترجیح دهید که به طور قابل توجهی عملکرد را بهبود می بخشد (مثلا IntDataBuffer.setInt(idx)

پارامترها
ارزش ارزشی که باید نوشته شود
شاخص شاخصی که مقدار در آن نوشته خواهد شد
برمی گرداند
  • این بافر
پرتاب می کند
IndexOutOfBoundsException اگر شاخص منفی باشد یا کوچکتر از اندازه بافر نباشد
ReadOnlyBufferException اگر این بافر فقط خواندنی باشد

اندازه بلند انتزاعی عمومی ()

اندازه بافر، بر حسب عناصر

به عنوان مثال، در مورد بافر بایت، این مقدار برابر با تعداد بایت هایی است که این بافر می تواند نگه دارد. برای یک بافر عدد صحیح، برابر با تعداد اعداد صحیح است، بنابراین اندازه بایت این بافر size() * Integer.BYTES است.

برمی گرداند
  • اندازه بافر

برش انتزاعی عمومی DataBuffer <T> (شاخص بلند، اندازه طولانی)

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

شاخص به اضافه اندازه جدید نباید بزرگتر از این اندازه بافر باشد. تغییرات در محتوای این بافر در بافر جدید قابل مشاهده خواهد بود و بالعکس. بافر جدید فقط خواندنی خواهد بود اگر و فقط اگر این بافر فقط خواندنی باشد.

پارامترها
شاخص شاخص اولین مقدار بافر جدید ایجاد شده
اندازه اندازه این بافر جدید، نباید بزرگتر از size() باشد.
برمی گرداند
  • بافر جدید
پرتاب می کند
IllegalArgumentException اگر مقدار اندازه از بررسی های اعتبار سنجی عبور نکند

چکیده عمومی DataBufferWindow <? پنجره <T>> DataBuffer را گسترش می دهد (اندازه طولانی)

یک 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 اگر این بافر فقط خواندنی باشد