Каков наилучший циклический байтовый буфер с изменяемыми размерами, доступный в Java?

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

  •  11-07-2019
  •  | 
  •  

Вопрос

Мне нужен класс байтового буфера в Java для однопоточного использования. Я должен быть в состоянии вставить данные в конец буфера и прочитать данные в передней части, с амортизированной стоимостью O (1). Размер буфера должен изменяться при заполнении, а не генерировать исключение или что-то в этом роде.

Я мог бы написать один сам, но я был бы очень удивлен, если бы его еще не было в стандартном пакете Java, и если бы его не было, я бы ожидал, что он существует в какой-то хорошо протестированной публичной библиотеке .

Что бы вы порекомендовали?

Это было полезно?

Решение

Не уверен, что это " лучший " ;, но у вас есть хороший пример Буфер кольцевого байта здесь .

Эти Утилиты Java - OstermillerUtils находятся под лицензия GPL .

  

Этот кольцевой буфер байтов реализует модель производителя / потребителя кольцевого буфера для байтов. Заполнение и очистка буфера выполняется стандартными Java InputStreams и OutputStreams.

     

Использование этого класса - более простая альтернатива использованию PipedInputStream и PipedOutputStream.
  PipedInputStreams и PipedOutputStreams не поддерживают операцию пометки, не позволяют вам контролировать размеры буферов, которые они используют, и имеют более сложный API, который требует создания двух классов и их соединения.

Другие советы

Интересно, хорошо ли это работает?

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

Вероятно, мы попробуем это, поскольку это лицензия apache.

Я использую java.util.ArrayDeque<Byte> в проекте с аналогичными требованиями. Обратите внимание, что вы можете легко изменить реализацию, используя java.util.concurrent Queue реализация.

Я написал такой класс: ByteRingBuffer

Размер не изменяется автоматически, но есть метод resize ().

Это " хорошо проверено " с программой автоматического тестирования, которая использует случайные числа для проверки всех возможных ситуаций.

Еще одно решение - использовать GrowablePipedOutputStream и GrowablePipedInputStream от JBoss.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top