DataLayout

interface publique DataLayout
Sous-classes indirectes connues

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));
 }
 
Si une seule valeur utilisateur s'étend sur plusieurs valeurs de tampon, 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);
 }
 
Si une seule valeur utilisateur s'étend sur plusieurs valeurs de tampon, 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