Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Те классы Java Utilities - OstermillerUtils находятся под Лицензия GPL.

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

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

Ответ 3

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

Ответ 4

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

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

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