Циклический буфер со считывателями

Мне нужна реализация циклического буфера, которая поддерживает чтение с возможностью поиска. Мой вариант использования:

В моем коде я собираю сообщения журнала. В конце концов, пользователь может посетить страницу, которая показывает его красиво отформатированным. Чтобы сообщения не заполняли оперативную память, мне нужна структура FIFO фиксированного размера. Если пользователь долго не посещает страницу, сообщения удаляются. Это нормально.

Пока пользователь остается на странице, к странице должны добавляться новые сообщения журнала. С помощью JavaScript пользователь может определить, сколько сообщений следует хранить. Это полностью не зависит от размера буфера в моем приложении. Поэтому мне нужен читатель структуры данных, который я могу использовать для перебора любых новых элементов.

Если пользователь перезагружает страницу или загружает ее в первый раз, мне нужно установить считыватель на самый старый элемент в FIFO.

По мере добавления сообщений ридер должен обновляться. Если браузеру не удается получить новые сообщения достаточно быстро, читатель должен в конечном итоге указать на самое старое сообщение в FIFO. Это означает, что пользователь может пропустить пару сообщений. Это не идеально, но это должно быть необычным случаем. Если бы читатель мог сказать мне «пропустил 5 сообщений», это было бы прекрасно, но я могу жить и без этого.

Знаете ли вы существующую реализацию, которая предлагает это?


person Aaron Digulla    schedule 26.05.2011    source источник


Ответы (1)


Попробуйте http://commons.apache.org/collections/, посмотрите там круговые буферы.

person Karl-Bjørnar Øie    schedule 26.05.2011
comment
Бесполезен в моем случае. Все эти реализации предлагают только деструктивное чтение (через remove()) или геттеры, которые заставят код читателя знать, какие сообщения уже были обработаны. - person Aaron Digulla; 26.05.2011
comment
вы можете читать с помощью итератора: commons.apache.org/collections/api-release/org/apache/commons/ - person Pih; 26.05.2011
comment
Итератор не обновляется при добавлении элементов в буфер. - person Aaron Digulla; 26.05.2011
comment
Также буфер блокируется, когда он заполнен. Мне нужен циклический буфер. - person Aaron Digulla; 26.05.2011