Sous-classes indirectes connues Bfloat16Layout , BoolLayout , BooleanDataLayout <S étend DataBuffer <?>>, ByteDataLayout <S étend DataBuffer <?>>, DoubleDataLayout <S étend DataBuffer <?>>, Float16Layout , FloatDataLayout <S étend DataBuffer <?>>, IntDataLayout <S étend DataBuffer <?>>, LongDataLayout <S étend DataBuffer <?>>, ShortDataLayout <S étend DataBuffer <?>>, StringLayout |
Convertit les données stockées dans un tampon en un type donné.
Les instances DataLayout
sont utilisées pour définir un format personnalisé pour stocker et lire les données d'un DataBuffer
. Ils fournissent une couche de ségrégation entre le type de données stockées dans le tampon (le type de tampon ) et le type de données manipulées par l'utilisateur final (le type d'utilisateur ).
Étant donné que les méthodes de conversion sont invoquées pour chaque valeur écrite ou lue, l'utilisation de dispositions de données peut avoir un impact négatif sur les performances. L'utilisation directe de types primitifs doit donc être privilégiée autant que possible.
Il est également recommandé d'implémenter des dispositions de données immuables afin qu'elles puissent être réappliquées à plusieurs tampons sans réallouer une nouvelle instance pour chacun d'eux. Par exemple:
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)); } }; }
Méthodes publiques
abstrait DataBuffer <T> | applyTo (tampon S) Appliquez cette disposition au tampon fourni. |
résumé T | readObject (tampon S, index long) Lit les valeurs n = scale() du tampon à l'index donné et les renvoie sous la forme d'une valeur unique dans le type d'utilisateur. |
abstrait entier | échelle () Indique le nombre de valeurs de tampon requises pour représenter une seule valeur utilisateur, la valeur par défaut est 1. |
vide abstrait | writeObject (tampon S, valeur T, index long) Écrit une valeur utilisateur dans le tampon à l'index donné après l'avoir convertie en type de tampon. |
Méthodes publiques
public abstrait DataBuffer <T> applyTo (tampon S)
Appliquez cette disposition au tampon fourni.
L'instance DataBuffer
renvoyée est simplement un wrapper du tampon d'origine et ne dispose pas de son propre stockage de sauvegarde.
Paramètres
tampon | le tampon cible auquel appliquer cette disposition |
---|
Retours
- un tampon avec cette disposition
public abstract T readObject (tampon S, index long)
Lit les valeurs n = scale()
du tampon à l'index donné et les renvoie sous la forme d'une valeur unique dans le type d'utilisateur.
Il est de la responsabilité des implémenteurs de cette interface de lire la valeur à convertir à partir du tampon donné, en utilisant la méthode la plus appropriée. Par exemple, pour une mise en page qui convertit un seul long
en BigInteger
,
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }
index
indique la position de départ de la séquence à lire dans le tampon. Paramètres
tampon | le tampon à partir duquel lire |
---|---|
indice | position du buffer à lire dans le buffer |
Retours
- la valeur convertie
échelle int abstraite publique ()
Indique le nombre de valeurs de tampon requises pour représenter une seule valeur utilisateur, la valeur par défaut est 1.
L'échelle doit être positive et doit être un nombre entier, ce qui signifie qu'une seule valeur de tampon dans un tampon ne peut pas être utilisée pour représenter plus d'une valeur utilisateur.
public abstract void writeObject (tampon S, valeur T, index long)
Écrit une valeur utilisateur dans le tampon à l'index donné après l'avoir convertie en type de tampon.
Il est de la responsabilité des implémenteurs de cette interface d'écrire la valeur convertie dans le tampon donné avant le retour de cet appel, en utilisant la méthode la plus appropriée. Par exemple, pour une mise en page convertissant un BigInteger
en un seul long
,
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
indique la position de départ de la séquence à écrire dans le tampon. Paramètres
tampon | le tampon dans lequel écrire |
---|---|
valeur | la valeur dans le type d'utilisateur à convertir et à écrire |
indice | index dans le tampon où la valeur convertie doit être écrite |