¿Cuál es el mejor búfer de bytes circular redimensionable disponible en Java?
Pregunta
Necesito una clase de búfer de bytes en Java para uso de subproceso único. Debería poder insertar datos en la parte posterior del búfer y leer los datos en la parte delantera, con un costo amortizado de O (1). El búfer debería cambiar de tamaño cuando esté lleno, en lugar de generar una excepción o algo.
Podría escribir uno yo mismo, pero me sorprendería mucho si esto aún no existiera en un paquete estándar de Java, y si no es así, esperaría que exista en una biblioteca pública bien probada .
¿Qué recomendarías?
Solución
No estoy seguro si es " el mejor " ;, pero tiene un buen ejemplo de Búfer circular de bytes aquí .
Esas Java Utilities - OstermillerUtils están en licencia GPL .
Este búfer circular de bytes implementa el modelo circular de productor / consumidor de búfer para bytes. El llenado y vaciado del búfer se realiza con Java InputStreams y OutputStreams estándar.
Usar esta clase es una alternativa más simple que usar un PipedInputStream y un PipedOutputStream.
PipedInputStreams y PipedOutputStreams no admiten la operación de marca, no le permiten controlar los tamaños de búfer que usan y tienen una API más complicada que requiere instanciar dos clases y conectarlas.
Otros consejos
Me pregunto si este funciona bien
Probablemente probaremos este ya que es una licencia de Apache.
Estoy usando un java.util.ArrayDeque<Byte>
en un proyecto con requisitos similares. Tenga en cuenta que puede cambiar fácilmente la implementación utilizando un java.util.concurrent Queue
implementación.
He escrito tal clase: ByteRingBuffer
No cambia el tamaño automáticamente, pero hay un método resize ().
Es " bien probado " con un programa de prueba automática, que usa números aleatorios para probar todas las situaciones posibles.
Otra solución es usar GrowablePipedOutputStream y GrowablePipedInputStream de JBoss.