DataLayout

interfaz pública DataLayout
Subclases indirectas conocidas

Convierte los datos almacenados en un búfer a un tipo determinado.

DataLayout instancias de DataLayout se utilizan para definir un formato personalizado para almacenar y leer datos de un DataBuffer . Proporcionan una capa de segregación entre el tipo de datos almacenados en el búfer (el tipo de búfer ) y el tipo de datos manipulados por el usuario final (el tipo de usuario ).

Dado que los métodos de conversión se invocan para cada valor que se escribe o lee, trabajar con diseños de datos puede tener un impacto negativo en el rendimiento, por lo que se debe preferir el uso directo de tipos primitivos siempre que sea posible.

También se recomienda implementar diseños de datos inmutables para que se puedan volver a aplicar a varios búferes sin reasignar una nueva instancia para cada uno de ellos. Por ejemplo:

 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étodos públicos

DataBuffer abstracto <T>
applyTo (búfer S)
Aplique este diseño al búfer proporcionado.
T abstracto
readObject (búfer S, índice largo)
Lee los valores n = scale() del búfer en el índice dado y los devuelve como un valor único en el tipo de usuario.
int abstracto
escala ()
Indica el número de valores de búfer necesarios para representar un valor de usuario único; el valor predeterminado es 1.
vacío abstracto
writeObject (búfer S, valor T, índice largo)
Escribe un valor de usuario en el búfer en el índice dado después de convertirlo al tipo de búfer.

Métodos públicos

Public abstract DataBuffer <T> applyTo (búfer S)

Aplique este diseño al búfer proporcionado.

La instancia de DataBuffer devuelta es simplemente un contenedor del búfer original y no tiene un almacenamiento de respaldo propio.

Parámetros
buffer el búfer de destino para aplicar este diseño a
Devoluciones
  • un búfer con este diseño

resumen público T readObject (búfer S, índice largo)

Lee los valores n = scale() del búfer en el índice dado y los devuelve como un valor único en el tipo de usuario.

Es responsabilidad de los implementadores de esta interfaz leer el valor a convertir del búfer dado, utilizando el método más apropiado. Por ejemplo, para un diseño que convierte un solo long en un BigInteger ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
Si un valor de usuario único escala más de un valor de búfer, el index indica la posición inicial de la secuencia que se leerá del búfer.

Parámetros
buffer el búfer para leer
índice posición del búfer para leer en el búfer
Devoluciones
  • el valor convertido

escala int abstracta pública ()

Indica el número de valores de búfer necesarios para representar un valor de usuario único; el valor predeterminado es 1.

La escala debe ser positiva y debe ser un número entero, lo que significa que un solo valor de búfer en un búfer no se puede utilizar para representar más de un valor de usuario.

public abstract void writeObject (búfer S, valor T, índice largo)

Escribe un valor de usuario en el búfer en el índice dado después de convertirlo al tipo de búfer.

Es responsabilidad de los implementadores de esta interfaz escribir el valor convertido en el búfer dado antes de que regrese esta llamada, utilizando el método más apropiado. Por ejemplo, para un diseño que convierte un BigInteger en un solo long ,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
Si un único valor de usuario se escala sobre más de un valor de búfer, el index indica la posición inicial de la secuencia que se escribirá en el búfer.

Parámetros
buffer el búfer para escribir
valor el valor en el tipo de usuario para convertir y escribir
índice índice en el búfer donde se debe escribir el valor convertido