Subkelas Tidak Langsung yang Diketahui Bfloat16Layout , BoolLayout , BooleanDataLayout <S extends DataBuffer <?>>, ByteDataLayout <S extends DataBuffer <?>>, DoubleDataLayout <S extends DataBuffer <?>>, Float16Layout , FloatDataLayout <S extends DataBuffer <?>>, IntDataLayout <S extends DataBuffer <?>>, LongDataLayout <S memperluas DataBuffer <?>>, ShortDataLayout <S memperluas DataBuffer <?>>, StringLayout |
Mengonversi data yang disimpan dalam buffer ke tipe tertentu.
Instance DataLayout
digunakan untuk menentukan format khusus untuk menyimpan dan membaca data DataBuffer
. Mereka menyediakan lapisan pemisahan antara tipe data yang disimpan di buffer (tipe buffer ) dan tipe data yang dimanipulasi oleh pengguna akhir (tipe pengguna ).
Karena metode konversi dipanggil untuk setiap nilai yang ditulis atau dibaca, bekerja dengan tata letak data mungkin berdampak negatif pada performa sehingga menggunakan tipe primitif secara langsung sebaiknya diutamakan bila memungkinkan.
Disarankan juga untuk menerapkan tata letak data yang tidak dapat diubah sehingga dapat diterapkan kembali ke beberapa buffer tanpa mengalokasikan ulang instance baru untuk masing-masing buffer. Misalnya:
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)); } }; }
Metode Publik
abstrak DataBuffer <T> | applyTo (penyangga S) Terapkan tata letak ini ke buffer yang disediakan. |
abstrak T | readObject (buffer S, indeks panjang) Membaca nilai n = scale() dari buffer pada indeks tertentu dan mengembalikannya sebagai nilai tunggal dalam tipe pengguna. |
abstrak ke dalam | skala () Menunjukkan jumlah nilai buffer yang diperlukan untuk mewakili satu nilai pengguna, defaultnya adalah 1. |
kekosongan abstrak | writeObject (buffer S, nilai T, indeks panjang) Menulis nilai pengguna ke dalam buffer pada indeks yang diberikan setelah mengubahnya menjadi tipe buffer. |
Metode Publik
abstrak publik DataBuffer <T> applyTo (S buffer)
Terapkan tata letak ini ke buffer yang disediakan.
Instance DataBuffer
yang dikembalikan hanyalah pembungkus buffer asli dan tidak memiliki penyimpanan cadangannya sendiri.
Parameter
penyangga | buffer target untuk menerapkan tata letak ini |
---|
Kembali
- buffer dengan tata letak ini
public abstract T readObject (buffer S, indeks panjang)
Membaca nilai n = scale()
dari buffer pada indeks tertentu dan mengembalikannya sebagai nilai tunggal dalam tipe pengguna.
Implementor antarmuka ini bertanggung jawab untuk membaca nilai yang akan dikonversi dari buffer yang diberikan, menggunakan metode yang paling tepat. Misalnya, untuk tata letak yang mengonversi satu long
menjadi BigInteger
,
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }
index
menunjukkan posisi awal urutan yang akan dibaca dari buffer. Parameter
penyangga | buffer untuk membaca |
---|---|
indeks | posisi buffer untuk dibaca di buffer |
Kembali
- nilai yang dikonversi
skala int abstrak publik ()
Menunjukkan jumlah nilai buffer yang diperlukan untuk mewakili satu nilai pengguna, defaultnya adalah 1.
Skala harus positif dan harus berupa bilangan bulat, artinya satu nilai buffer dalam buffer tidak dapat digunakan untuk mewakili lebih dari satu nilai pengguna.
public abstract void writeObject (buffer S, nilai T, indeks panjang)
Menulis nilai pengguna ke dalam buffer pada indeks yang diberikan setelah mengubahnya menjadi tipe buffer.
Implementor antarmuka ini bertanggung jawab untuk menulis nilai yang dikonversi ke buffer yang diberikan sebelum panggilan ini kembali, menggunakan metode yang paling tepat. Misalnya, untuk tata letak yang mengonversi BigInteger
menjadi satu long
,
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
menunjukkan posisi awal dari urutan yang akan ditulis ke buffer. Parameter
penyangga | buffer untuk menulis |
---|---|
nilai | nilai dalam tipe pengguna untuk mengkonversi dan menulis |
indeks | indeks di buffer tempat nilai yang dikonversi harus ditulis |