Subclasses indiretas conhecidas Bfloat16Layout , BoolLayout , BooleanDataLayout <S estende DataBuffer <?>>, ByteDataLayout <S estende DataBuffer <?>>, DoubleDataLayout <S estende DataBuffer <?>>, Float16Layout , FloatDataLayout <S estende DataBuffer <?>>, IntDataLayout <S estende DataBuffer <?>>, LongDataLayout <S estende DataBuffer <?>>, ShortDataLayout <S estende DataBuffer <?>>, StringLayout |
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)); }
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); }
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 |