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 os tipos em caixa, o que não requer tipos de buffer explícitos como os buffers JDK padrão.
DataBuffer
seja linear, principalmente quando se trata de tipos não primitivos ou buffers grandes. Métodos Públicos
resumo <R> R | |
abstrato DataBuffer <T> | copyTo ( DataBuffer <T> dst, tamanho longo) Escreva as referências dos objetos na matriz de origem neste buffer. |
booleano abstrato | igual a (objeto obj) Verifica a igualdade entre os buffers de dados. |
abstrato T | getObject (índice longo) Lê o valor no índice fornecido. |
booleano abstrato | isReadOnly () Diz se este buffer é apoiado ou não por um array acessível. |
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. |
abstrato DataBuffer <T> | deslocamento (índice longo) Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo deste buffer, começando no índice fornecido. |
abstrato DataBuffer <T> | ler (T [] dst) Leia as referências dos objetos neste buffer na matriz de destino. |
abstrato DataBuffer <T> | ler (T [] dst, deslocamento interno, comprimento interno) Leia as referências dos objetos neste buffer na matriz de destino. |
abstrato DataBuffer <T> | setObject (valor T, índice longo) Grava o valor fornecido neste buffer no índice fornecido. |
abstrato longo | tamanho () Tamanho do buffer, em elementos. |
abstrato DataBuffer <T> | fatia (índice longo, tamanho longo) Cria um novo buffer cujo conteúdo é uma subseqüência compartilhada do conteúdo desse buffer, começando com o índice fornecido e com o tamanho fornecido. |
abstrato DataBufferWindow <? estende DataBuffer <T>> | janela (tamanho longo) Cria um DataBufferWindow que fornece uma visão parcial deste buffer. |
abstrato DataBuffer <T> | escrever (T [] src) Escreva as referências dos objetos na matriz de origem neste buffer. |
abstrato DataBuffer <T> | escrever (T [] src, deslocamento interno, comprimento interno) Método Bulk put , usando matrizes int. |
Métodos Públicos
resumo público R aceitar ( DataStorageVisitor <R> visitante)
Visita o armazenamento de apoio deste buffer.
A implementação do buffer é responsável por retornar uma referência ao armazenamento de dados real para o 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 em que está realmente interessado. Para qualquer outro tipo de armazenamento, esta chamada irá 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()
, uma BufferUnderfloatException é lançada.
Caso contrário, este método copia n = size
valores de 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 este 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 é 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 |
public abstract boolean equals (Object obj)
Verifica a igualdade entre os 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
public abstract 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 é deterministicamente conhecido pelo responsável pela chamada. Em qualquer outro caso, prefira o uso de sua variante primitiva que irá 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 é negativo ou não menor que o tamanho do buffer |
---|
public abstract boolean isReadOnly ()
Diz se este buffer é apoiado ou não por um array acessível.
Devoluções
- verdadeiro se, e somente se, este buffer for somente leitura
public abstract 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 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, este 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 passam nas verificações de validação |
---|
public abstract DataBuffer <T> offset (índice longo)
Cria um novo buffer cujo conteúdo é uma subsequência compartilhada do conteúdo deste buffer, começando no índice fornecido.
O índice não deve ser maior que o tamanho do buffer. Mudanças 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, este 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 |
---|
public abstract DataBuffer <T> read (T [] dst)
Leia as referências dos objetos neste buffer na matriz de destino.
Este método transfere valores desse buffer para a matriz de destino fornecida. Se houver menos valores no buffer do que o necessário para atender à 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
desse buffer para a matriz fornecida.
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 |
---|
public abstract DataBuffer <T> read (T [] dst, int offset, int length)
Leia as referências dos objetos neste buffer na matriz de destino.
Este método transfere valores desse buffer para a matriz de destino fornecida. Se houver menos valores no buffer do que o necessário 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 n = length
valores de 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 |
---|---|
Deslocamento | 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 na matriz fornecida; deve ser não negativo e não maior que dst.length - offset |
Devoluções
- este buffer
Lança
BufferUnderflowException | se houver menos do que os valores de comprimento restantes neste buffer |
---|---|
IndexOutOfBoundsException | se as pré-condições nos parâmetros de deslocamento e comprimento não forem válidas |
public abstract 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 é deterministicamente conhecido pelo responsável pela chamada. Em qualquer outro caso, prefira o uso de sua variante primitiva que irá melhorar significativamente o desempenho (por exemplo, IntDataBuffer.setInt(idx)
Parâmetros
valor | o valor a ser escrito |
---|---|
índice | o índice em que o valor será escrito |
Devoluções
- este buffer
Lança
IndexOutOfBoundsException | se o índice é negativo ou não menor que o tamanho do buffer |
---|---|
ReadOnlyBufferException | se este buffer for somente leitura |
resumo público tamanho longo ()
Tamanho do buffer, em elementos.
Por exemplo, no caso de um buffer de bytes, esse valor é igual ao número de bytes que esse buffer pode conter. Para um buffer inteiro, é igual ao número de inteiros, portanto, o tamanho em bytes desse buffer é size() * Integer.BYTES
.
Devoluções
- o tamanho do buffer
fatia public abstract DataBuffer <T> (índice longo, tamanho longo)
Cria um novo buffer cujo conteúdo é uma subseqüência compartilhada do conteúdo desse buffer, começando com o índice fornecido e com o tamanho fornecido.
O índice mais o novo tamanho não deve ser maior que o tamanho do buffer. Mudanças 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, este 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 |
---|
public abstract DataBufferWindow <? estende DataBuffer janela <T >> (tamanho de comprimento)
Cria um DataBufferWindow
que fornece uma visão parcial deste buffer.
A janela criada tem um tamanho fixo e pode "slide"
ao longo desse buffer para fornecer diferentes visualizações dos dados sem alocar uma nova instância de buffer, como o offset(long)
faz. Isso 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 é seguro para threads.
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 suporta janelas de buffer |
---|
public abstract DataBuffer <T> write (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
da matriz fornecida.
Parâmetros
src | a matriz de origem da qual os valores devem ser lidos |
---|
Devoluções
- este buffer
Lança
BufferOverflowException | se houver espaço insuficiente neste buffer para os valores na matriz de origem |
---|---|
ReadOnlyBufferException | se este buffer for somente leitura |
public abstract DataBuffer <T> write (T [] src, int offset, int length)
Método Bulk put , 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 n = length
valores de n = length
da matriz fornecida para este buffer, começando no deslocamento fornecido.
Parâmetros
src | a matriz de origem da qual os valores devem ser lidos |
---|---|
Deslocamento | 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 na matriz fornecida; deve ser não negativo e não maior que src.length - offset |
Devoluções
- este buffer
Lança
BufferOverflowException | se houver espaço insuficiente 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 |