# Class SocketBufferHandler

java.lang.Object
org.apache.tomcat.util.net.SocketBufferHandler

public class SocketBufferHandler extends Object
Manages read and write `ByteBuffer` instances for a socket connection, handling buffer state transitions between read and write modes.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SocketBufferHandler(int readBufferSize, int writeBufferSize, boolean direct)`
  Creates a new SocketBufferHandler with the specified buffer sizes.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `configureReadBufferForRead()`
  Switches the read buffer into read mode.
  `void`
  `configureReadBufferForWrite()`
  Switches the read buffer into write mode.
  `void`
  `configureWriteBufferForRead()`
  Switches the write buffer into read mode.
  `void`
  `configureWriteBufferForWrite()`
  Switches the write buffer into write mode.
  `void`
  `expand(int newSize)`
  Expands both read and write buffers to the specified size.
  `void`
  `free()`
  Releases native resources for direct buffers, if applicable.
  `ByteBuffer`
  `getReadBuffer()`
  Returns the read buffer.
  `ByteBuffer`
  `getWriteBuffer()`
  Returns the write buffer.
  `boolean`
  `isReadBufferEmpty()`
  Checks whether the read buffer contains any data.
  `boolean`
  `isWriteBufferEmpty()`
  Checks whether the write buffer contains any data.
  `boolean`
  `isWriteBufferWritable()`
  Checks whether the write buffer has space for additional data.
  `void`
  `reset()`
  Resets both read and write buffers to their initial empty state.
  `void`
  `unReadReadBuffer(ByteBuffer returnedData)`
  Inserts previously read data back into the read buffer so it can be read again.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### SocketBufferHandler

    public SocketBufferHandler(int readBufferSize, int writeBufferSize, boolean direct)
    Creates a new SocketBufferHandler with the specified buffer sizes.
    Parameters:
      `readBufferSize` - the size of the read buffer in bytes
      `writeBufferSize` - the size of the write buffer in bytes
      `direct` - whether to allocate direct (off-heap) buffers

- ## Method Details

  - ### configureReadBufferForWrite

    public void configureReadBufferForWrite()
    Switches the read buffer into write mode.

  - ### configureReadBufferForRead

    public void configureReadBufferForRead()
    Switches the read buffer into read mode.

  - ### getReadBuffer

    public ByteBuffer getReadBuffer()
    Returns the read buffer.
    Returns:
      the read buffer

  - ### isReadBufferEmpty

    public boolean isReadBufferEmpty()
    Checks whether the read buffer contains any data.
    Returns:
      `true` if the read buffer is empty

  - ### unReadReadBuffer

    public void unReadReadBuffer(ByteBuffer returnedData)
    Inserts previously read data back into the read buffer so it can be read again.
    Parameters:
      `returnedData` - the data to insert back into the buffer
    Throws:
      `BufferOverflowException` - if the buffer cannot accommodate the returned data

  - ### configureWriteBufferForWrite

    public void configureWriteBufferForWrite()
    Switches the write buffer into write mode.

  - ### configureWriteBufferForRead

    public void configureWriteBufferForRead()
    Switches the write buffer into read mode.

  - ### isWriteBufferWritable

    public boolean isWriteBufferWritable()
    Checks whether the write buffer has space for additional data.
    Returns:
      `true` if the write buffer can accept more data

  - ### getWriteBuffer

    public ByteBuffer getWriteBuffer()
    Returns the write buffer.
    Returns:
      the write buffer

  - ### isWriteBufferEmpty

    public boolean isWriteBufferEmpty()
    Checks whether the write buffer contains any data.
    Returns:
      `true` if the write buffer is empty

  - ### reset

    public void reset()
    Resets both read and write buffers to their initial empty state.

  - ### expand

    public void expand(int newSize)
    Expands both read and write buffers to the specified size.
    Parameters:
      `newSize` - the new buffer size in bytes

  - ### free

    public void free()
    Releases native resources for direct buffers, if applicable.