20

我需要一个 Java 中的字节缓冲区类以供单线程使用。我应该能够在缓冲区的后面插入数据并在前面读取数据,摊销成本为 O(1)。缓冲区满时应该调整大小,而不是抛出异常或其他东西。

我可以自己写一个,但是如果标准 Java 包中还不存在它,我会感到非常惊讶,如果它不存在,我希望它存在于一些经过良好测试的公共库中。

你会推荐什么?

4

5 回答 5

9

不确定它是否是“最好的”,但你有一个很好的循环字节缓冲区示例here

那些Java Utilities-OstermillerUtils 类在GPL 许可下。

这个循环字节缓冲区实现了字节的循环缓冲区生产者/消费者模型。使用标准 Java InputStreams 和 OutputStreams 填充和清空缓冲区。

使用此类是使用 PipedInputStream 和 PipedOutputStream 的更简单的替代方法。
PipedInputStreams 和 PipedOutputStreams 不支持标记操作,不允许您控制它们使用的缓冲区大小,并且具有更复杂的 API,需要实例化两个类并连接它们。

于 2008-11-28T12:07:00.803 回答
3

我想知道这个是否运作良好

https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

我们可能会尝试这个,因为它是 apache 许可证。

于 2013-04-09T16:13:17.587 回答
2

java.util.ArrayDeque<Byte>在具有类似要求的项目中使用 a 。请注意,您可以使用 java.util.concurrent 实现轻松更改Queue 实现。

于 2009-05-25T17:50:47.787 回答
1

我写过这样一个类: ByteRingBuffer

它不会自动调整大小,但有一个 resize() 方法。

它通过自动测试程序“经过充分测试”,使用随机数来测试所有可能的情况。

于 2014-04-03T20:41:45.947 回答
0

另一种解决方案是使用JBoss 的GrowablePipedOutputStreamGrowablePipedInputStream

于 2009-10-13T20:11:41.823 回答