简体   繁体   中英

What is the best resizable circular byte buffer available in Java?

I need a byte buffer class in Java for single-threaded use. I should be able to insert data at the back of the buffer and read data at the front, with an amortized cost of O(1). The buffer should resize when it's full, rather than throw an exception or something.

I could write one myself, but I'd be very surprised if this didn't exist yet in a standard Java package, and if it doesn't, I'd expect it to exist in some well-tested public library.

What would you recommend?

Not sure if it is "the best", but you have a nice example of Circular Byte buffer here .

Those Java Utilities - OstermillerUtils classes are under GPL license .

This Circular Byte Buffer implements the circular buffer producer/consumer model for bytes. Filling and emptying the buffer is done with standard Java InputStreams and OutputStreams.

Using this class is a simpler alternative to using a PipedInputStream and a PipedOutputStream.
PipedInputStreams and PipedOutputStreams don't support the mark operation, don't allow you to control buffer sizes that they use, and have a more complicated API that requires a instantiating two classes and connecting them.

I wonder if this one works well

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

We will probably try this one since it is apache license.

I'm using a java.util.ArrayDeque<Byte> in a project with similar requirements. Note that you can easily change implementation using a java.util.concurrent Queue implementation.

I have written such a class: ByteRingBuffer

It does not resize automatically, but there is a resize() method.

It's "well-tested" with an automatic test program, that uses random numbers to test all possible situations.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM