DataBuffer

antarmuka publik DataBuffer
Subkelas Tidak Langsung yang Diketahui

Wadah data dengan tipe tertentu.

Contoh DataBuffer memetakan segmen memori asli atau tumpukan ke tampilan linier yang mendukung:

  • Pengindeksan 64-bit, memungkinkan untuk bekerja dengan buffer yang lebih besar dari 2 31 byte
  • Penyimpanan objek jenis apa pun dan tidak hanya primitif
  • Tipe generik juga memungkinkan untuk bekerja secara langsung dengan tipe kotak, yang tidak memerlukan tipe buffer eksplisit seperti buffer JDK standar.
Penting untuk dicatat bahwa tidak ada jaminan memori yang dikelola oleh DataBuffer bersifat linier, khususnya ketika berhadapan dengan tipe non-primitif atau buffer besar.

Metode Publik

abstrak <R> R
terima ( DataStorageVisitor <R> pengunjung)
Mengunjungi penyimpanan cadangan buffer ini.
abstrak DataBuffer <T>
copyTo ( DataBuffer <T> dst, ukuran panjang)
Tulis referensi objek dalam array sumber ke dalam buffer ini.
boolean abstrak
sama dengan (Objek objek)
Memeriksa kesetaraan antara buffer data.
abstrak T
getObject (indeks panjang)
Membaca nilai pada indeks yang diberikan.
boolean abstrak
adalah ReadOnly ()
Memberitahukan apakah buffer ini didukung oleh array yang dapat diakses atau tidak.
abstrak DataBuffer <T>
sempit (ukuran panjang)
Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, yang ukurannya diatur ke nilai yang ditentukan.
abstrak DataBuffer <T>
offset (indeks panjang)
Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, dimulai dari indeks yang ditentukan.
abstrak DataBuffer <T>
baca (T[] dst)
Baca referensi objek dalam buffer ini ke dalam array tujuan.
abstrak DataBuffer <T>
baca (T[] dst, int offset, int panjang)
Baca referensi objek dalam buffer ini ke dalam array tujuan.
abstrak DataBuffer <T>
setObject (nilai T, indeks panjang)
Menulis nilai yang diberikan ke dalam buffer ini pada indeks yang diberikan.
abstrak panjang
ukuran ()
Ukuran buffer, dalam elemen.
abstrak DataBuffer <T>
irisan (indeks panjang, ukuran panjang)
Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, dimulai dari indeks tertentu dan ukuran tertentu.
abstrak DataBufferWindow <? memperluas DataBuffer <T>>
jendela (ukuran panjang)
Membuat DataBufferWindow yang menyediakan sebagian tampilan buffer ini.
abstrak DataBuffer <T>
tulis (T[] src)
Tulis referensi objek dalam array sumber ke dalam buffer ini.
abstrak DataBuffer <T>
tulis (T[] src, int offset, int panjang)
Metode penempatan massal, menggunakan array int.

Metode Publik

abstrak publik R terima ( DataStorageVisitor <R> pengunjung)

Mengunjungi penyimpanan cadangan buffer ini.

Implementasi buffer bertanggung jawab untuk meneruskan kembali referensi ke penyimpanan data aktual kepada pengunjung yang disediakan. Pengunjung tidak harus menangani semua kemungkinan jenis penyimpanan data dan hanya dapat mengganti metode penyimpanan yang benar-benar diminatinya. Untuk jenis penyimpanan lainnya, panggilan ini akan kembali ke fallback() sehingga pengunjung dapat menjalankan beberapa rutinitas umum jika diperlukan.

Parameter
pengunjung mengunjungi penyimpanan data buffer ini
Kembali
  • nilai yang sama dikembalikan oleh pengunjung

public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst, ukuran panjang)

Tulis referensi objek dalam array sumber ke dalam buffer ini.

Jika ada lebih banyak nilai untuk disalin daripada ukuran buffer tujuan, yaitu size > dst.size() , maka tidak ada nilai yang ditransfer dan BufferOverflowException dilempar. Di sisi lain, jika ada lebih banyak nilai untuk disalin daripada ukuran buffer sumber, yaitu > src.size() , maka BufferUnderfloatException akan dilempar.

Jika tidak, metode ini akan menyalin nilai n = size dari buffer ini ke buffer tujuan.

Parameter
dst buffer tujuan tempat nilai disalin; tidak boleh menjadi penyangga ini
ukuran jumlah nilai untuk disalin ke buffer tujuan
Kembali
  • penyangga ini
Melempar
Pengecualian Argumen Ilegal jika buffer tujuan adalah buffer ini
ReadOnlyBufferException jika buffer tujuan bersifat read-only
Pengecualian BufferOverflow jika tidak ada cukup ruang di buffer tujuan
BufferUnderflowException jika tidak ada nilai yang cukup di buffer sumber

boolean abstrak publik sama dengan (Obj objek)

Memeriksa kesetaraan antara buffer data.

Buffer data sama dengan objek lain jika objek ini adalah DataBuffer lain dengan ukuran, jenis, dan elemen yang sama serta dalam urutan yang sama. Misalnya:

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
 

Perhatikan bahwa perhitungan yang diperlukan untuk memverifikasi kesetaraan antara dua buffer bisa mahal dalam beberapa kasus dan oleh karena itu, disarankan untuk tidak menggunakan metode ini di jalur kritis yang mengutamakan kinerja.

Parameter
keberatan objek untuk membandingkan buffer ini
Kembali
  • benar jika buffer ini sama dengan objek yang disediakan

abstrak publik T getObject (indeks panjang)

Membaca nilai pada indeks yang diberikan. Penting: Penggunaan metode ini harus dibatasi pada buffer tipe non-primitif atau ketika tipe data tidak diketahui secara deterministik oleh pemanggil. Dalam kasus lain, pilihlah penggunaan varian primitif yang akan meningkatkan kinerja secara signifikan (misalnya IntDataBuffer.getInt(idx)

Parameter
indeks indeks dari mana float akan dibaca
Kembali
  • nilai pada indeks yang diberikan
Melempar
IndexOutOfBoundsException jika indeks negatif atau tidak lebih kecil dari ukuran buffer

boolean abstrak publik isReadOnly ()

Memberitahukan apakah buffer ini didukung oleh array yang dapat diakses atau tidak.

Kembali
  • benar jika, dan hanya jika, buffer ini bersifat read-only

public abstract DataBuffer <T> sempit (ukuran panjang)

Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, yang ukurannya diatur ke nilai yang ditentukan.

Ukuran baru tidak boleh lebih besar dari ukuran buffer ini. Perubahan pada konten buffer ini akan terlihat di buffer baru dan sebaliknya. Buffer baru akan bersifat read-only jika, dan hanya jika, buffer ini bersifat read-only.

Panggilan ini setara dengan slice(0, size)

Parameter
ukuran ukuran buffer baru ini
Kembali
  • penyangga baru
Melempar
Pengecualian Argumen Ilegal jika nilai indeks dan/atau ukuran tidak lolos pemeriksaan validasi

abstrak publik DataBuffer <T> offset (indeks panjang)

Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, dimulai dari indeks yang ditentukan.

Indeks tidak boleh lebih besar dari ukuran buffer ini. Perubahan pada konten buffer ini akan terlihat di buffer baru dan sebaliknya. Buffer baru akan bersifat read-only jika, dan hanya jika, buffer ini bersifat read-only.

Panggilan ini setara dengan slice(index, size() - index)

Parameter
indeks indeks nilai pertama buffer baru yang dibuat, tidak boleh lebih besar dari size()
Kembali
  • penyangga baru
Melempar
Pengecualian Argumen Ilegal jika indeks tidak lulus pemeriksaan validasi

abstrak publik DataBuffer <T> baca (T[] dst)

Baca referensi objek dalam buffer ini ke dalam array tujuan.

Metode ini mentransfer nilai dari buffer ini ke array tujuan tertentu. Jika nilai dalam buffer lebih sedikit daripada yang diperlukan untuk memenuhi permintaan, yaitu jika dst.length > size() , maka tidak ada nilai yang ditransfer dan BufferUnderflowException dilempar.

Jika tidak, metode ini akan menyalin nilai n = dst.length dari buffer ini ke dalam array yang diberikan.

Parameter
dst array tempat nilai akan ditulis
Kembali
  • penyangga ini
Melempar
BufferUnderflowException jika tidak ada cukup nilai untuk disalin dari buffer ini

public abstract DataBuffer <T> baca (T[] dst, int offset, int panjang)

Baca referensi objek dalam buffer ini ke dalam array tujuan.

Metode ini mentransfer nilai dari buffer ini ke array tujuan tertentu. Jika ada lebih sedikit nilai dalam buffer daripada yang dibutuhkan untuk memenuhi permintaan, yaitu jika length > size() , maka tidak ada nilai yang ditransfer dan BufferUnderflowException dilempar.

Jika tidak, metode ini akan menyalin nilai n = length dari buffer ini ke dalam larik tertentu mulai dari offset tertentu.

Parameter
dst array tempat nilai akan ditulis
mengimbangi offset dalam array dari nilai pertama yang akan ditulis; harus non-negatif dan tidak lebih besar dari dst.length
panjang jumlah maksimum nilai yang akan ditulis ke array tertentu; harus non-negatif dan tidak lebih besar dari dst.length - offset
Kembali
  • penyangga ini
Melempar
BufferUnderflowException jika ada kurang dari nilai panjang yang tersisa di buffer ini
IndexOutOfBoundsException jika prasyarat pada parameter offset dan panjang tidak terpenuhi

public abstract DataBuffer <T> setObject (nilai T, indeks panjang)

Menulis nilai yang diberikan ke dalam buffer ini pada indeks yang diberikan. Penting: Penggunaan metode ini harus dibatasi pada buffer tipe non-primitif atau ketika tipe data tidak diketahui secara deterministik oleh pemanggil. Dalam kasus lain, pilihlah penggunaan varian primitif yang akan meningkatkan kinerja secara signifikan (misalnya IntDataBuffer.setInt(idx)

Parameter
nilai nilai yang akan ditulis
indeks indeks di mana nilai akan ditulis
Kembali
  • penyangga ini
Melempar
IndexOutOfBoundsException jika indeks negatif atau tidak lebih kecil dari ukuran buffer
ReadOnlyBufferException jika buffer ini bersifat read-only

abstrak publik ukuran panjang ()

Ukuran buffer, dalam elemen.

Misalnya, dalam kasus buffer byte, nilai ini sama dengan jumlah byte yang dapat ditampung oleh buffer ini. Untuk buffer bilangan bulat sama dengan jumlah bilangan bulat, oleh karena itu ukuran buffer ini dalam byte adalah size() * Integer.BYTES .

Kembali
  • ukuran penyangga

irisan DataBuffer <T> abstrak publik (indeks panjang, ukuran panjang)

Membuat buffer baru yang kontennya merupakan kelanjutan bersama dari konten buffer ini, dimulai dari indeks tertentu dan ukuran tertentu.

Indeks ditambah ukuran baru tidak boleh lebih besar dari ukuran buffer ini. Perubahan pada konten buffer ini akan terlihat di buffer baru dan sebaliknya. Buffer baru akan bersifat read-only jika, dan hanya jika, buffer ini bersifat read-only.

Parameter
indeks indeks nilai pertama buffer baru yang dibuat
ukuran ukuran buffer baru ini, tidak boleh lebih besar dari size()
Kembali
  • penyangga baru
Melempar
Pengecualian Argumen Ilegal jika nilai ukuran tidak lolos pemeriksaan validasi

DataBufferWindow abstrak publik <? memperluas jendela DataBuffer <T>> (ukuran panjang)

Membuat DataBufferWindow yang menyediakan sebagian tampilan buffer ini.

Jendela yang dibuat memiliki ukuran tetap dan dapat "slide" di sepanjang buffer ini untuk memberikan tampilan data yang berbeda tanpa mengalokasikan instance buffer baru, seperti yang dilakukan offset(long) . Hal ini meningkatkan kinerja secara keseluruhan ketika operasi ini sering diulang. Misalnya:

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

Objek yang dikembalikan bersifat stateful dan tidak aman untuk thread.

Parameter
ukuran ukuran jendela
Kembali
  • jendela baru yang dimulai pada indeks 0 buffer ini
Melempar
Tidak DidukungOperationException jika buffer jenis ini tidak mendukung buffer windows

abstrak publik DataBuffer <T> tulis (T[] src)

Tulis referensi objek dalam array sumber ke dalam buffer ini.

Metode ini mentransfer nilai dalam array sumber tertentu ke dalam buffer ini. Jika ada lebih banyak nilai dalam array sumber daripada di buffer ini, yaitu jika src.length > size() , maka tidak ada nilai yang ditransfer dan BufferOverflowException dilempar.

Jika tidak, metode ini akan menyalin nilai n = src.length dari array yang diberikan.

Parameter
src array sumber dari mana nilai akan dibaca
Kembali
  • penyangga ini
Melempar
Pengecualian BufferOverflow jika tidak ada cukup ruang di buffer ini untuk nilai dalam array sumber
ReadOnlyBufferException jika buffer ini bersifat read-only

abstrak publik DataBuffer <T> tulis (T[] src, int offset, int panjang)

Metode penempatan massal, menggunakan array int.

Metode ini mentransfer nilai dalam array sumber tertentu ke dalam buffer ini. Jika ada lebih banyak nilai dalam array sumber daripada di buffer ini, yaitu jika length > size() , maka tidak ada nilai yang ditransfer dan BufferOverflowException dilempar.

Jika tidak, metode ini akan menyalin nilai n = length dari larik tertentu ke dalam buffer ini, dimulai dari offset yang ditentukan.

Parameter
src array sumber dari mana nilai akan dibaca
mengimbangi offset dalam array dari nilai pertama yang dibaca; harus non-negatif dan tidak lebih besar dari src.length
panjang jumlah nilai yang akan dibaca dari array tertentu; harus non-negatif dan tidak lebih besar dari src.length - offset
Kembali
  • penyangga ini
Melempar
Pengecualian BufferOverflow jika tidak ada cukup ruang di buffer ini untuk nilai dalam array sumber
IndexOutOfBoundsException jika prasyarat pada parameter offset dan panjang tidak terpenuhi
ReadOnlyBufferException jika buffer ini bersifat read-only