زیر کلاس های غیر مستقیم شناخته شده |
محفظه ای از داده ها از نوع خاصی.
نمونههایی از DataBuffer
بخشهای حافظه بومی یا پشتهای را به نمای خطی نگاشت میکنند که پشتیبانی میکند:
- نمایه سازی 64 بیتی، اجازه کار با بافر بزرگتر از 231 بایت را می دهد
- ذخیره سازی شی از هر نوع و نه تنها اولیه
- انواع عمومی امکان کار مستقیم با انواع جعبهدار را نیز فراهم میکند، که مانند بافرهای استاندارد JDK به انواع بافر صریح نیاز ندارد.
DataBuffer
خطی باشد، به خصوص زمانی که با انواع غیر ابتدایی یا بافرهای بزرگ سروکار داریم. روش های عمومی
چکیده <R> 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 | اگر این بافر فقط خواندنی باشد |