Skip to content

ByteBuf discardable bytes management

In Netty's ByteBuf class, the buffer space is segmented into three distinct regions: discardable bytes, readable bytes (CONTENT), and writable bytes^[600-developer__big-data__netty__netty-ByteBuf.md]. These regions are defined and managed by two primary pointers: the readerIndex and the writerIndex.

Buffer Layout

The logical layout of a ByteBuf is structured such that 0 <= readerIndex <= writerIndex <= capacity^[600-developer__big-data__netty__netty-ByteBuf.md].

  • Discardable bytes: This is the space between index 0 and the readerIndex. It represents data that has already been read.
  • Readable bytes (CONTENT): This is the space between the readerIndex and the writerIndex. It contains the actual data awaiting consumption^[600-developer__big-data__netty__netty-ByteBuf.md].
  • Writable bytes: This is the space between the writerIndex and the capacity. It is the available area for writing new data^[600-developer__big-data__netty__netty-ByteBuf.md].

Management Operations

Discarding Read Bytes

Over time, the discardable bytes region (the read bytes) can occupy unnecessary space if the buffer is being reused. To reclaim this memory, the discardReadBytes() method is used^[600-developer__big-data__netty__netty-ByteBuf.md].

This operation shifts the readable bytes to the beginning of the buffer. Consequently, the readerIndex resets to 0, and the writerIndex decreases, thereby increasing the capacity of the writable bytes region^[600-developer__big-data__netty__netty-ByteBuf.md].

Clearing the Buffer

Alternatively, the clear() method can be used to reset the buffer indices without performing the memory copy associated with discarding bytes^[600-developer__big-data__netty__netty-ByteBuf.md]. This operation sets both the readerIndex and writerIndex to 0, rendering the entire buffer capacity writable^[600-developer__big-data__netty__netty-ByteBuf.md].

  • ByteBuf
  • [[Netty]]
  • [[Reference Counted]]

Sources

^[600-developer__big-data__netty__netty-ByteBuf.md]