DataLayout

interface pública DataLayout
Subclasses indiretas conhecidas

Converte dados armazenados em um buffer em um determinado tipo.

DataLayout instâncias de 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 ).

Uma vez que os métodos de conversão são chamados para cada valor que é escrito ou lido, trabalhar com layouts de dados pode ter um impacto negativo no desempenho, portanto, usar tipos primitivos diretamente 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

abstrato DataBuffer <T>
applyTo (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 único valor no tipo de usuário.
int abstrato
escala ()
Indica o número de valores de buffer necessários para representar um único valor do usuário; o padrão é 1.
vazio abstrato
writeObject (buffer S, valor T, índice longo)
Grava um valor de usuário no buffer no índice fornecido após convertê-lo para o tipo de buffer.

Métodos Públicos

public abstract DataBuffer <T> applyTo (S buffer)

Aplique este layout ao buffer fornecido.

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

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

public abstract 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 fornecido, utilizando o método mais adequado. Por exemplo, para um layout que converte um único long em um BigInteger ,

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

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

public abstract int scale ()

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

A escala deve ser positiva e deve ser 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 de 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 que esta chamada retorne, 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 de usuário for dimensionado em mais de um valor de buffer, o index indica a posição inicial da sequência a ser gravada no buffer.

Parâmetros
amortecedor 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