我需要Java中的字节缓冲区类用于单线程使用。我应该能够在缓冲区的后面插入数据并在前面读取数据,摊销成本为O(1)。缓冲区应该在它满了时调整大小,而不是抛出异常或其他东西。
我可以自己编写一个,但如果在标准Java包中不存在,我会感到非常惊讶,如果没有,我希望它存在于一些经过良好测试的公共库中
你会推荐什么?
答案 0 :(得分:9)
不确定它是否“最好”,但你有一个Circular Byte buffer here的好例子。
这些Java Utilities - OstermillerUtils类位于GPL license下。
此循环字节缓冲区实现字节的循环缓冲区生成器/使用者模型。使用标准Java InputStreams和OutputStreams来填充和清空缓冲区。
使用此类是使用PipedInputStream和PipedOutputStream的更简单的替代方法。
PipedInputStreams和PipedOutputStreams不支持标记操作,不允许您控制它们使用的缓冲区大小,并且具有更复杂的API,需要实例化两个类并连接它们。
答案 1 :(得分:3)
我想知道这个是否运作良好
我们可能会尝试这个,因为它是apache许可证。
答案 2 :(得分:2)
我在具有类似要求的项目中使用java.util.ArrayDeque<Byte>
。请注意,您可以使用java.util.concurrent Queue
轻松更改实现
实施
答案 3 :(得分:1)
答案 4 :(得分:0)
另一种解决方案是使用JBoss的GrowablePipedOutputStream和GrowablePipedInputStream。