Bilinen Dolaylı Alt Sınıflar 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, DataBuffer'ı genişletir <?>>, ShortDataLayout <S DataBuffer'ı genişletir <?>>, StringLayout |
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)); }
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); }
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 |