DataLayout

interface pública DataLayout
Subclasses indiretas conhecidas

Converte dados armazenados em um buffer para um determinado tipo.

As instâncias DataLayout são usadas para definir um formato personalizado para armazenar e ler dados de um DataBuffer . Eles fornecem uma camada de segregação entre o tipo de dados armazenados no buffer (o tipo de buffer ) e o tipo de dados manipulados pelo usuário final (o tipo de usuário ).

Como os métodos de conversão são invocados para cada valor escrito ou lido, trabalhar com layouts de dados pode ter um impacto negativo no desempenho, portanto, o uso direto de tipos primitivos deve ser preferido sempre que possível.

Também é recomendado implementar layouts de dados imutáveis ​​para que possam ser reaplicados a vários buffers sem realocar uma nova instância para cada um deles. Por exemplo:

 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

buffer de dados abstrato <T>
aplicarTo (buffer S)
Aplique este layout ao buffer fornecido.
abstrato T
readObject (buffer S, índice longo)
Lê valores n = scale() do buffer no índice fornecido e os retorna como um valor único no tipo de usuário.
abstrato int
escala ()
Indica o número de valores de buffer necessários para representar um único valor de usuário; o padrão é 1.
vazio abstrato
writeObject (buffer S, valor T, índice longo)
Grava um valor do usuário no buffer no índice fornecido após convertê-lo para o tipo de buffer.

Métodos Públicos

público abstrato DataBuffer <T> applyTo (buffer S)

Aplique este layout ao buffer fornecido.

A instância DataBuffer retornada é simplesmente um wrapper para o buffer original e não possui um armazenamento de apoio próprio.

Parâmetros
buffer o buffer de destino para aplicar este layout
Devoluções
  • um buffer com este layout

público abstrato T readObject (buffer S, índice longo)

Lê valores n = scale() do buffer no índice fornecido e os retorna como um único valor no tipo de usuário.

É responsabilidade dos implementadores desta interface ler o valor a ser convertido do buffer determinado, utilizando o método mais adequado. Por exemplo, para um layout que converte um único long em BigInteger ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
Se um único valor do usuário escalar mais de um valor de buffer, index indica a posição inicial da sequência a ser lida no buffer.

Parâmetros
buffer o buffer para leitura
índice posição do buffer para ler no buffer
Devoluções
  • o valor convertido

escala int abstrata pública ()

Indica o número de valores de buffer necessários para representar um único valor de usuário; o padrão é 1.

A escala deve ser positiva e um número inteiro, o que significa que um único valor de buffer em um buffer não pode ser usado para representar mais de um valor de usuário.

public abstract void writeObject (buffer S, valor T, índice longo)

Grava um valor do usuário no buffer no índice fornecido após convertê-lo para o tipo de buffer.

É responsabilidade dos implementadores desta interface escrever o valor convertido no buffer fornecido antes do retorno desta chamada, usando o método mais apropriado. Por exemplo, para um layout que converte um BigInteger em um único long ,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
Se um único valor do usuário escalar mais de um valor de buffer, index indica a posição inicial da sequência a ser gravada no buffer.

Parâmetros
buffer o buffer para escrever
valor o valor no tipo de usuário para converter e escrever
índice índice no buffer onde o valor convertido deve ser escrito