【问题标题】:Cyclic buffer with readers带阅读器的循环缓冲区
【发布时间】:2011-05-26 08:15:35
【问题描述】:

我需要一个支持可搜索阅读器的循环缓冲区实现。我的用例:

在我的代码中,我收集日志消息。最终,用户可能会访问一个页面,该页面显示他们的格式很好。为了确保消息不会填满 RAM,我需要一个固定大小的 FIFO 结构。如果用户长时间不访问该页面,消息就会被丢弃。没关系。

只要用户停留在页面上,新的日志消息就应该附加到页面上。通过 JavaScript,用户可以定义要保留多少条消息。这完全独立于我的应用程序中的缓冲区大小。所以我需要一个数据结构的读者,我可以用它来迭代任何新元素。

如果用户重新加载页面或第一次加载,我需要将阅读器设置为FIFO中最旧的元素。

添加消息后,必须更新阅读器。如果浏览器未能足够快地获取新消息,则阅读器最终应该指向 FIFO 中最旧的消息。这意味着用户可能会错过几条消息。这并不完美,但应该是不常见的情况。如果读者能告诉我“错过了 5 条消息”,那就完美了,但我可以没有它。

您知道提供此功能的现有实现吗?

【问题讨论】:

    标签: java logging fifo


    【解决方案1】:

    试试http://commons.apache.org/collections/,看看那里的循环缓冲区。

    【讨论】:

    • 对我来说没用。所有这些实现只提供破坏性读取(通过remove())或获取器,它们会强制读取器代码知道哪些消息已被处理。
    • 将元素添加到缓冲区时迭代器不会更新。
    • 缓冲区满时也会阻塞。我需要一个循环缓冲区。
    猜你喜欢
    • 2012-08-13
    • 2013-09-26
    • 1970-01-01
    • 2023-03-28
    • 2011-04-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多