org.jboss.netty.buffer

## Class DirectChannelBufferFactory

- java.lang.Object
- - org.jboss.netty.buffer.AbstractChannelBufferFactory
  - - org.jboss.netty.buffer.DirectChannelBufferFactory

- All Implemented Interfaces:
    ChannelBufferFactory

      public class DirectChannelBufferFactory
      extends AbstractChannelBufferFactory

  A `ChannelBufferFactory` which pre-allocates a large chunk of direct buffer and returns its slice on demand. Direct buffers are reclaimed via `ReferenceQueue` in most JDK implementations, and therefore they are deallocated less efficiently than an ordinary heap buffer. Consequently, a user will get `OutOfMemoryError` when one tries to allocate small direct buffers more often than the GC throughput of direct buffers, which is much lower than the GC throughput of heap buffers. This factory avoids this problem by allocating a large chunk of pre-allocated direct buffer and reducing the number of the garbage collected internal direct buffer objects.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `DirectChannelBufferFactory()` Creates a new factory whose default `ByteOrder` is `ByteOrder.BIG_ENDIAN`.
    `DirectChannelBufferFactory(ByteOrder defaultOrder)` Creates a new factory with the specified default `ByteOrder`.
    `DirectChannelBufferFactory(ByteOrder defaultOrder, int preallocatedBufferCapacity)` Creates a new factory with the specified default `ByteOrder`.
    `DirectChannelBufferFactory(int preallocatedBufferCapacity)` Creates a new factory whose default `ByteOrder` is `ByteOrder.BIG_ENDIAN`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ChannelBuffer` | `getBuffer(ByteBuffer nioBuffer)` Returns a `ChannelBuffer` whose content is equal to the sub-region of the specified `nioBuffer`.
    `ChannelBuffer` | `getBuffer(ByteOrder order, byte[] array, int offset, int length)` Returns a `ChannelBuffer` whose content is equal to the sub-region of the specified `array`.
    `ChannelBuffer` | `getBuffer(ByteOrder order, int capacity)` Returns a `ChannelBuffer` with the specified `endianness` and `capacity`.
    `static ChannelBufferFactory` | `getInstance()`
    `static ChannelBufferFactory` | `getInstance(ByteOrder defaultEndianness)`

    - ### Methods inherited from class org.jboss.netty.buffer.AbstractChannelBufferFactory

      `getBuffer, getBuffer, getDefaultOrder`

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### DirectChannelBufferFactory

          public DirectChannelBufferFactory()

      Creates a new factory whose default `ByteOrder` is `ByteOrder.BIG_ENDIAN`.

    - #### DirectChannelBufferFactory

          public DirectChannelBufferFactory(int preallocatedBufferCapacity)

      Creates a new factory whose default `ByteOrder` is `ByteOrder.BIG_ENDIAN`.

    - #### DirectChannelBufferFactory

          public DirectChannelBufferFactory(ByteOrder defaultOrder)

      Creates a new factory with the specified default `ByteOrder`.
      Parameters:
        `defaultOrder` - the default `ByteOrder` of this factory

    - #### DirectChannelBufferFactory

          public DirectChannelBufferFactory(ByteOrder defaultOrder,
                                    int preallocatedBufferCapacity)

      Creates a new factory with the specified default `ByteOrder`.
      Parameters:
        `defaultOrder` - the default `ByteOrder` of this factory

  - ### Method Detail

    - #### getInstance

          public static ChannelBufferFactory getInstance()

    - #### getInstance

          public static ChannelBufferFactory getInstance(ByteOrder defaultEndianness)

    - #### getBuffer

          public ChannelBuffer getBuffer(ByteOrder order,
                                int capacity)

      Description copied from interface: `ChannelBufferFactory`
      Returns a `ChannelBuffer` with the specified `endianness` and `capacity`.
      Parameters:
        `order` - the endianness of the returned `ChannelBuffer`
        `capacity` - the capacity of the returned `ChannelBuffer`
      Returns:
        a `ChannelBuffer` with the specified `endianness` and `capacity`, whose `readerIndex` and `writerIndex` are `0`

    - #### getBuffer

          public ChannelBuffer getBuffer(ByteOrder order,
                                byte[] array,
                                int offset,
                                int length)

      Description copied from interface: `ChannelBufferFactory`
      Returns a `ChannelBuffer` whose content is equal to the sub-region of the specified `array`. Depending on the factory implementation, the returned buffer could wrap the `array` or create a new copy of the `array`.
      Parameters:
        `order` - the endianness of the returned `ChannelBuffer`
        `array` - the byte array
        `offset` - the offset of the byte array
        `length` - the length of the byte array
      Returns:
        a `ChannelBuffer` with the specified content, whose `readerIndex` and `writerIndex` are `0` and `(length - offset)` respectively

    - #### getBuffer

          public ChannelBuffer getBuffer(ByteBuffer nioBuffer)

      Description copied from interface: `ChannelBufferFactory`
      Returns a `ChannelBuffer` whose content is equal to the sub-region of the specified `nioBuffer`. Depending on the factory implementation, the returned buffer could wrap the `nioBuffer` or create a new copy of the `nioBuffer`.
      Parameters:
        `nioBuffer` - the NIO `ByteBuffer`
      Returns:
        a `ChannelBuffer` with the specified content, whose `readerIndex` and `writerIndex` are `0` and `nioBuffer.remaining()` respectively

Copyright © 2008-2012 The Netty Project. All Rights Reserved.