O que é tampão disponível a melhor byte circular redimensionável em Java?

StackOverflow https://stackoverflow.com/questions/325602

  •  11-07-2019
  •  | 
  •  

Pergunta

I precisa de uma classe tampão bytes em Java para utilização com um único segmento. I deve ser capaz de inserir os dados na parte de trás do tampão e ler os dados na parte da frente, com um custo amortizado de O (1). O tampão deve redimensionar quando está cheio, ao invés de lançar uma exceção ou algo assim.

Eu poderia escrever um para mim, mas eu ficaria muito surpreso se isso ainda não existia em um pacote Java padrão, e se isso não acontecer, eu esperaria que ela exista em alguma biblioteca pública bem testada .

O que você recomendaria?

Foi útil?

Solução

Não tenho certeza se ele é "o melhor", mas você tem um bom exemplo de Circular Byte tampão aqui .

Aqueles Java Utilities - OstermillerUtils aulas estão sob GPL licença .

Este byte buffer circular implementa o modelo circular produtor tampão / consumidor para bytes. Encher e esvaziar o buffer é feito com padrão InputStreams e OutputStreams Java.

Usando essa classe é uma alternativa mais simples de usar um PipedInputStream e uma PipedOutputStream.
PipedInputStreams e PipedOutputStreams não suportam a operação de marca, não permitem que você controle tampão tamanhos que eles usam, e tem uma API mais complicado que requer uma instanciação de duas classes e conectá-los.

Outras dicas

Gostaria de saber se este funciona bem

https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

Iremos provavelmente tentar um presente, uma vez que é apache licença.

Eu estou usando um java.util.ArrayDeque<Byte> em um projeto com requisitos semelhantes. Note que você pode facilmente mudar de implementação usando um Queue java.util.concurrent implementação.

Eu escrevi essa classe a: ByteRingBuffer

Ele não redimensionar automaticamente, mas há um método de redimensionamento ().

É do "bem testado" com um programa de teste automático, que usa números aleatórios para testar todas as situações possíveis.

Outra solução é usar GrowablePipedOutputStream e GrowablePipedInputStream pela JBoss.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top