org.jboss.netty.buffer
Class DirectChannelBufferFactory

java.lang.Object
  extended by org.jboss.netty.buffer.AbstractChannelBufferFactory
      extended by 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.

Version:
$Rev: 2293 $, $Date: 2010-06-01 17:38:51 +0900 (Tue, 01 Jun 2010) $
Author:
The Netty Project, Trustin Lee

Constructor Summary
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
 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-2011 JBoss, a division of Red Hat, Inc.. All Rights Reserved.