Каков наилучший циклический байтовый буфер с изменяемыми размерами, доступный в Java?
Вопрос
Мне нужен класс байтового буфера в Java для однопоточного использования. Я должен быть в состоянии вставить данные в конец буфера и прочитать данные в передней части, с амортизированной стоимостью O (1). Размер буфера должен изменяться при заполнении, а не генерировать исключение или что-то в этом роде.
Я мог бы написать один сам, но я был бы очень удивлен, если бы его еще не было в стандартном пакете Java, и если бы его не было, я бы ожидал, что он существует в какой-то хорошо протестированной публичной библиотеке . р>
Что бы вы порекомендовали?
Решение
Не уверен, что это " лучший " ;, но у вас есть хороший пример Буфер кольцевого байта здесь .
Эти Утилиты Java - OstermillerUtils находятся под лицензия GPL .
Этот кольцевой буфер байтов реализует модель производителя / потребителя кольцевого буфера для байтов. Заполнение и очистка буфера выполняется стандартными Java InputStreams и OutputStreams.
Использование этого класса - более простая альтернатива использованию PipedInputStream и PipedOutputStream.
PipedInputStreams и PipedOutputStreams не поддерживают операцию пометки, не позволяют вам контролировать размеры буферов, которые они используют, и имеют более сложный API, который требует создания двух классов и их соединения.
Другие советы
Интересно, хорошо ли это работает?
Вероятно, мы попробуем это, поскольку это лицензия apache.
Я использую java.util.ArrayDeque<Byte>
в проекте с аналогичными требованиями. Обратите внимание, что вы можете легко изменить реализацию, используя java.util.concurrent Queue
реализация.
Я написал такой класс: ByteRingBuffer
Размер не изменяется автоматически, но есть метод resize ().
Это " хорошо проверено " с программой автоматического тестирования, которая использует случайные числа для проверки всех возможных ситуаций.
Еще одно решение - использовать GrowablePipedOutputStream и GrowablePipedInputStream от JBoss.