DataLayout

antarmuka publik DataLayout
Subkelas Tidak Langsung yang Diketahui

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));
 }
 
Jika satu nilai pengguna menskalakan lebih dari satu nilai buffer, 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);
 }
 
Jika nilai pengguna tunggal menskalakan lebih dari satu nilai buffer, 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