DataBuffer

interface pública DataBuffer
Subclasses indiretas conhecidas

Um contêiner de dados de um tipo específico.

Instâncias de DataBuffer mapeiam segmentos de memória nativa ou heap para uma visualização linear que suporta:

  • Indexação de 64 bits, permitindo trabalhar com buffer maior que 2 31 bytes
  • Armazenamento de objetos de qualquer tipo e não apenas primitivos
  • Os tipos genéricos também permitem trabalhar diretamente com tipos em caixa, o que não requer tipos de buffer explícitos como acontece com os buffers JDK padrão.
É importante notar que não há garantia de que a memória gerenciada por um DataBuffer seja linear, principalmente quando se trata de tipos não primitivos ou buffers grandes.

Métodos Públicos

abstrato <R> R
aceitar (visitante DataStorageVisitor <R>)
Visita o armazenamento de apoio deste buffer.
buffer de dados abstrato <T>
copyTo ( DataBuffer <T> dst, tamanho longo)
Escreva as referências dos objetos na matriz de origem neste buffer.
booleano abstrato
é igual (objeto obj)
Verifica a igualdade entre buffers de dados.
abstrato T
getObject (índice longo)
Lê o valor no índice fornecido.
booleano abstrato
isReadOnly ()
Informa se este buffer é ou não apoiado por uma matriz acessível.
buffer de dados abstrato <T>
estreito (tamanho longo)
Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo deste buffer, cujo tamanho é definido para o valor fornecido.
buffer de dados abstrato <T>
deslocamento (índice longo)
Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo desse buffer, começando no índice fornecido.
buffer de dados abstrato <T>
ler (T[]dst)
Leia as referências dos objetos neste buffer na matriz de destino.
buffer de dados abstrato <T>
leitura (T[] dst, deslocamento interno, comprimento interno)
Leia as referências dos objetos neste buffer na matriz de destino.
buffer de dados abstrato <T>
setObject (valor T, índice longo)
Grava o valor fornecido neste buffer no índice fornecido.
abstrato longo
tamanho ()
Tamanho do buffer, em elementos.
buffer de dados abstrato <T>
fatia (índice longo, tamanho longo)
Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo desse buffer, começando no índice e no tamanho especificados.
resumo DataBufferWindow <? estende DataBuffer <T>>
janela (tamanho longo)
Cria um DataBufferWindow que fornece uma visão parcial desse buffer.
buffer de dados abstrato <T>
escrever (T[]src)
Escreva as referências dos objetos na matriz de origem neste buffer.
buffer de dados abstrato <T>
escrever (T[] src, deslocamento interno, comprimento interno)
Método de colocação em massa, usando matrizes int.

Métodos Públicos

public abstract R aceitar (visitante DataStorageVisitor <R>)

Visita o armazenamento de apoio deste buffer.

A implementação do buffer é responsável por devolver uma referência ao armazenamento real de dados ao visitante fornecido. O visitante não precisa lidar com todos os tipos possíveis de armazenamento de dados e pode substituir apenas os métodos de armazenamento nos quais está realmente interessado. Para qualquer outro tipo de armazenamento, esta chamada retornará para fallback() para que o visitante possa executar alguma rotina genérica se necessário.

Parâmetros
Visitante visita o armazenamento de dados deste buffer
Devoluções
  • o mesmo valor retornado pelo visitante

public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst, tamanho longo)

Escreva as referências dos objetos na matriz de origem neste buffer.

Se houver mais valores para copiar do que o tamanho do buffer de destino, ou seja, size > dst.size() , nenhum valor será transferido e uma BufferOverflowException será lançada. Por outro lado, se houver mais valores para copiar do que o tamanho do buffer de origem, ou seja > src.size() , então uma BufferUnderfloatException será lançada.

Caso contrário, este método copia valores n = size deste buffer para o buffer de destino.

Parâmetros
DST o buffer de destino no qual os valores são copiados; não deve ser esse buffer
tamanho número de valores a serem copiados para o buffer de destino
Devoluções
  • este buffer
Lança
Exceção de argumento ilegal se o buffer de destino for este buffer
ReadOnlyBufferException se o buffer de destino for somente leitura
BufferOverflowException se não houver espaço suficiente no buffer de destino
BufferUnderflowException se não houver valores suficientes no buffer de origem

público abstrato booleano igual a (Object obj)

Verifica a igualdade entre buffers de dados.

Um buffer de dados é igual a outro objeto se este objeto for outro DataBuffer do mesmo tamanho, tipo e os elementos forem iguais e na mesma ordem. Por exemplo:

IntDataBuffer buffer = DataBuffers.of(1, 2, 3);

 assertEquals(buffer, DataBuffers.of(1, 2, 3));  // true
 assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3));  // true, as Integers are equal to ints
 assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0));  // false, different sizes
 assertNotEquals(buffer, DataBuffers.of(1, 3, 2));  // false, different order
 assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L));  // false, different types
 

Observe que o cálculo necessário para verificar a igualdade entre dois buffers pode ser caro em alguns casos e, portanto, é recomendado não usar este método em um caminho crítico onde o desempenho é importante.

Parâmetros
obj objeto para comparar este buffer com
Devoluções
  • verdadeiro se este buffer for igual ao objeto fornecido

público abstrato T getObject (índice longo)

Lê o valor no índice fornecido. Importante: O uso deste método deve ser limitado a buffers de tipos não primitivos ou quando o tipo de dados não é conhecido deterministicamente pelo chamador. Em qualquer outro caso, prefira o uso de sua variante primitiva que melhorará significativamente o desempenho (por exemplo IntDataBuffer.getInt(idx)

Parâmetros
índice o índice a partir do qual o float será lido
Devoluções
  • o valor no índice fornecido
Lança
IndexOutOfBoundsException se o índice for negativo ou não menor que o tamanho do buffer

público abstrato booleano isReadOnly ()

Informa se este buffer é ou não apoiado por uma matriz acessível.

Devoluções
  • verdadeiro se, e somente se, esse buffer for somente leitura

público abstrato DataBuffer <T> estreito (tamanho longo)

Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo deste buffer, cujo tamanho é definido para o valor fornecido.

O novo tamanho não deve ser maior que esse tamanho de buffer. As alterações no conteúdo deste buffer serão visíveis no novo buffer e vice-versa. O novo buffer será somente leitura se, e somente se, esse buffer for somente leitura.

Esta chamada é equivalente a slice(0, size)

Parâmetros
tamanho tamanho deste novo buffer
Devoluções
  • o novo buffer
Lança
Exceção de argumento ilegal se os valores de índice e/ou tamanho não passarem nas verificações de validação

deslocamento de DataBuffer <T> abstrato público (índice longo)

Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo desse buffer, começando no índice fornecido.

O índice não deve ser maior que esse tamanho de buffer. As alterações no conteúdo deste buffer serão visíveis no novo buffer e vice-versa. O novo buffer será somente leitura se, e somente se, esse buffer for somente leitura.

Esta chamada é equivalente a slice(index, size() - index)

Parâmetros
índice índice do primeiro valor do novo buffer criado, não deve ser maior que size()
Devoluções
  • o novo buffer
Lança
Exceção de argumento ilegal se o índice não passar nas verificações de validação

público abstrato DataBuffer <T> lido (T[] dst)

Leia as referências dos objetos neste buffer na matriz de destino.

Este método transfere valores deste buffer para o array de destino fornecido. Se houver menos valores no buffer do que os necessários para satisfazer a solicitação, ou seja, se dst.length > size() , nenhum valor será transferido e uma BufferUnderflowException será lançada.

Caso contrário, este método copia os valores n = dst.length deste buffer para o array fornecido.

Parâmetros
DST a matriz na qual os valores devem ser escritos
Devoluções
  • este buffer
Lança
BufferUnderflowException se não houver valores suficientes para copiar deste buffer

público abstrato DataBuffer <T> lido (T[] dst, deslocamento interno, comprimento interno)

Leia as referências dos objetos neste buffer na matriz de destino.

Este método transfere valores deste buffer para o array de destino fornecido. Se houver menos valores no buffer do que os necessários para satisfazer a solicitação, ou seja, se length > size() , nenhum valor será transferido e uma BufferUnderflowException será lançada.

Caso contrário, este método copia valores n = length deste buffer para o array fornecido, começando no deslocamento fornecido.

Parâmetros
DST a matriz na qual os valores devem ser escritos
desvio o deslocamento dentro da matriz do primeiro valor a ser escrito; deve ser não negativo e não maior que dst.length
comprimento o número máximo de valores a serem gravados no array fornecido; deve ser não negativo e não maior que dst.length - offset
Devoluções
  • este buffer
Lança
BufferUnderflowException se houver menos valores de comprimento restantes neste buffer
IndexOutOfBoundsException se as pré-condições nos parâmetros de deslocamento e comprimento não forem válidas

público abstrato DataBuffer <T> setObject (valor T, índice longo)

Grava o valor fornecido neste buffer no índice fornecido. Importante: O uso deste método deve ser limitado a buffers de tipos não primitivos ou quando o tipo de dados não é conhecido deterministicamente pelo chamador. Em qualquer outro caso, prefira o uso de sua variante primitiva que melhorará significativamente o desempenho (por exemplo, IntDataBuffer.setInt(idx)

Parâmetros
valor o valor a ser escrito
índice o índice no qual o valor será escrito
Devoluções
  • este buffer
Lança
IndexOutOfBoundsException se o índice for negativo ou não menor que o tamanho do buffer
ReadOnlyBufferException se este buffer for somente leitura

tamanho longo abstrato público ()

Tamanho do buffer, em elementos.

Por exemplo, no caso de um buffer de bytes, este valor é igual ao número de bytes que este buffer pode conter. Para um buffer inteiro, é igual ao número de inteiros, portanto o tamanho em bytes deste buffer é size() * Integer.BYTES .

Devoluções
  • o tamanho do buffer

fatia de DataBuffer <T> abstrata pública (índice longo, tamanho longo)

Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo desse buffer, começando no índice e no tamanho especificados.

O índice mais o novo tamanho não deve ser maior que o tamanho do buffer. As alterações no conteúdo deste buffer serão visíveis no novo buffer e vice-versa. O novo buffer será somente leitura se, e somente se, esse buffer for somente leitura.

Parâmetros
índice índice do primeiro valor do novo buffer criado
tamanho tamanho deste novo buffer, não deve ser maior que size()
Devoluções
  • o novo buffer
Lança
Exceção de argumento ilegal se o valor do tamanho não passar nas verificações de validação

público abstrato DataBufferWindow <? estende a janela DataBuffer <T>> (tamanho longo)

Cria um DataBufferWindow que fornece uma visão parcial desse buffer.

A janela criada tem um tamanho fixo e pode "slide" ao longo deste buffer para fornecer diferentes visualizações dos dados sem alocar uma nova instância de buffer, como faz offset(long) . Isto melhora o desempenho geral quando esta operação é repetida com frequência. Por exemplo:

IntDataBuffer bufferA = DataBuffers.ofInts(1024);
 // ... init buffer data
 IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);

 // Return the index of the first occurrence of bufferB in bufferA using a sliding window
 DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
 for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
     if (windowA.slideTo(i).buffer().equals(bufferB)) {
         return i;
     
 }
 }

O objeto retornado tem estado e não é thread-safe.

Parâmetros
tamanho tamanho da janela
Devoluções
  • uma nova janela que começa no índice 0 deste buffer
Lança
UnsupportedOperationException se este tipo de buffer não suportar janelas de buffer

público abstrato DataBuffer <T> gravação (T[] src)

Escreva as referências dos objetos na matriz de origem neste buffer.

Este método transfere os valores da matriz de origem fornecida para este buffer. Se houver mais valores na matriz de origem do que neste buffer, ou seja, se src.length > size() , nenhum valor será transferido e uma BufferOverflowException será lançada.

Caso contrário, este método copia os valores n = src.length do array fornecido.

Parâmetros
fonte a matriz de origem a partir da qual os valores devem ser lidos
Devoluções
  • este buffer
Lança
BufferOverflowException se não houver espaço suficiente neste buffer para os valores na matriz de origem
ReadOnlyBufferException se este buffer for somente leitura

público abstrato DataBuffer <T> gravação (T[] src, deslocamento interno, comprimento interno)

Método de colocação em massa, usando matrizes int.

Este método transfere os valores da matriz de origem fornecida para este buffer. Se houver mais valores na matriz de origem do que neste buffer, ou seja, se length > size() , nenhum valor será transferido e uma BufferOverflowException será lançada.

Caso contrário, este método copia valores n = length do array fornecido para este buffer, começando no deslocamento fornecido.

Parâmetros
fonte a matriz de origem a partir da qual os valores devem ser lidos
desvio o deslocamento dentro da matriz do primeiro valor a ser lido; deve ser não negativo e não maior que src.length
comprimento o número de valores a serem lidos de um determinado array; deve ser não negativo e não maior que src.length - offset
Devoluções
  • este buffer
Lança
BufferOverflowException se não houver espaço suficiente neste buffer para os valores na matriz de origem
IndexOutOfBoundsException se as pré-condições nos parâmetros de deslocamento e comprimento não forem válidas
ReadOnlyBufferException se este buffer for somente leitura