DataLayout

genel arayüz DataLayout
Bilinen Dolaylı Alt Sınıflar

Bir arabellekte depolanan verileri belirli bir türe dönüştürür.

DataLayout örnekleri, bir DataBuffer verilerini depolamak ve okumak için özel bir format tanımlamak için kullanılır. Tamponda depolanan veri türü ( arabellek türü) ile son kullanıcı tarafından işlenen veri türü ( kullanıcı türü) arasında bir ayırma katmanı sağlarlar.

Dönüştürme yöntemleri yazılan veya okunan her değer için çağrıldığından, veri düzenleriyle çalışmak performansları olumsuz yönde etkileyebilir, bu nedenle mümkün olduğunca doğrudan ilkel türlerin kullanılması tercih edilmelidir.

Ayrıca, her biri için yeni bir örneği yeniden tahsis etmeden birden fazla ara belleğe yeniden uygulanabilmeleri için değişmez veri düzenlerinin uygulanması da önerilir. Örneğin:

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

Genel Yöntemler

özet DataBuffer <T>
ApplyTo (S arabelleği)
Bu düzeni sağlanan ara belleğe uygulayın.
soyut T
readObject (S arabellek, uzun dizin)
Verilen dizindeki arabellekten n = scale() değerlerini okur ve bunları kullanıcı türünde tek bir değer olarak döndürür.
soyut int
ölçek ()
Tek bir kullanıcı değerini temsil etmek için gereken arabellek değerlerinin sayısını belirtir; varsayılan 1'dir.
soyut geçersiz
writeObject (S arabelleği, T değeri, uzun dizin)
Arabellek türüne dönüştürdükten sonra, verilen dizindeki ara belleğe bir kullanıcı değeri yazar.

Genel Yöntemler

genel özet DataBuffer <T> applicationTo (S arabelleği)

Bu düzeni sağlanan ara belleğe uygulayın.

Döndürülen DataBuffer örneği, yalnızca orijinal arabelleğe yönelik bir sarmalayıcıdır ve kendine ait bir yedekleme deposuna sahip değildir.

Parametreler
tampon bu düzeni uygulayacak hedef arabellek
İade
  • bu düzene sahip bir tampon

genel özet T readObject (S arabellek, uzun dizin)

Verilen dizindeki arabellekten n = scale() değerlerini okur ve bunları kullanıcı türünde tek bir değer olarak döndürür.

Dönüştürülecek değeri verilen tampondan en uygun yöntemi kullanarak okumak bu arayüzün uygulayıcılarının sorumluluğundadır. Örneğin, tek bir long BigInteger dönüştüren bir düzen için,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
Tek bir kullanıcı değeri birden fazla arabellek değeri üzerinden ölçeklenirse index , arabellekten okunacak dizinin başlangıç ​​konumunu belirtir.

Parametreler
tampon okunacak arabellek
dizin arabellekte okunacak arabelleğin konumu
İade
  • dönüştürülen değer

genel soyut int ölçeği ()

Tek bir kullanıcı değerini temsil etmek için gereken arabellek değerlerinin sayısını belirtir; varsayılan 1'dir.

Ölçek pozitif olmalı ve bir tam sayı olmalıdır; bu, arabellekteki tek bir arabellek değerinin birden fazla kullanıcı değerini temsil etmek için kullanılamayacağı anlamına gelir.

genel soyut void writeObject (S arabelleği, T değeri, uzun dizin)

Arabellek türüne dönüştürdükten sonra, verilen dizindeki ara belleğe bir kullanıcı değeri yazar.

Dönüştürülen değeri, bu çağrı geri dönmeden önce en uygun yöntemi kullanarak verilen arabelleğe yazmak, bu arayüzün uygulayıcılarının sorumluluğundadır. Örneğin, BigInteger tek bir long dönüştüren bir düzen için,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
Tek bir kullanıcı değeri birden fazla tampon değeri üzerinden ölçeklenirse index , arabelleğe yazılacak dizinin başlangıç ​​konumunu gösterir.

Parametreler
tampon yazılacak arabellek
değer dönüştürülecek ve yazılacak kullanıcı türündeki değer
dizin dönüştürülen değerin yazılması gereken arabellekteki dizin