| 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 |