Package io.netty.channel
Class CoalescingBufferQueue
java.lang.Object
io.netty.channel.AbstractCoalescingBufferQueue
io.netty.channel.CoalescingBufferQueue
A FIFO queue of bytes where producers add bytes by repeatedly adding
ByteBuf
and consumers take bytes in
arbitrary lengths. This allows producers to add lots of small buffers and the consumer to take all the bytes
out in a single buffer. Conversely the producer may add larger buffers and the consumer could take the bytes in
many small buffers.
Bytes are added and removed with promises. If the last byte of a buffer added with a promise is removed then
that promise will complete when the promise passed to remove(int, io.netty.channel.ChannelPromise)
completes.
This functionality is useful for aggregating or partitioning writes into fixed size buffers for framing protocols such as HTTP2.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionCoalescingBufferQueue
(Channel channel) CoalescingBufferQueue
(Channel channel, int initSize) CoalescingBufferQueue
(Channel channel, int initSize, boolean updateWritability) -
Method Summary
Modifier and TypeMethodDescriptionprotected ByteBuf
compose
(ByteBufAllocator alloc, ByteBuf cumulation, ByteBuf next) Calculate the result ofcurrent + next
.void
releaseAndFailAll
(Throwable cause) Release all buffers in the queue and complete all listeners and promises.remove
(int bytes, ChannelPromise aggregatePromise) Remove aByteBuf
from the queue with the specified number of bytes.protected ByteBuf
The value to return whenAbstractCoalescingBufferQueue.remove(ByteBufAllocator, int, ChannelPromise)
is called but the queue is empty.Methods inherited from class io.netty.channel.AbstractCoalescingBufferQueue
add, add, add, addFirst, composeFirst, composeFirst, composeIntoComposite, copyAndCompose, copyTo, isEmpty, readableBytes, releaseAndFailAll, remove, removeFirst, size, toString, writeAndRemoveAll
-
Field Details
-
channel
-
-
Constructor Details
-
CoalescingBufferQueue
-
CoalescingBufferQueue
-
CoalescingBufferQueue
-
-
Method Details
-
remove
Remove aByteBuf
from the queue with the specified number of bytes. Any added buffer who's bytes are fully consumed during removal will have it's promise completed when the passed aggregateChannelPromise
completes.- Parameters:
bytes
- the maximum number of readable bytes in the returnedByteBuf
, ifbytes
is greater thanAbstractCoalescingBufferQueue.readableBytes
then a buffer of lengthAbstractCoalescingBufferQueue.readableBytes
is returned.aggregatePromise
- used to aggregate the promises and listeners for the constituent buffers.- Returns:
- a
ByteBuf
composed of the enqueued buffers.
-
releaseAndFailAll
Release all buffers in the queue and complete all listeners and promises. -
compose
Description copied from class:AbstractCoalescingBufferQueue
Calculate the result ofcurrent + next
.- Specified by:
compose
in classAbstractCoalescingBufferQueue
-
removeEmptyValue
Description copied from class:AbstractCoalescingBufferQueue
The value to return whenAbstractCoalescingBufferQueue.remove(ByteBufAllocator, int, ChannelPromise)
is called but the queue is empty.- Specified by:
removeEmptyValue
in classAbstractCoalescingBufferQueue
- Returns:
- the
ByteBuf
which represents an empty queue.
-