Package 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
AChannelBufferFactory
which pre-allocates a large chunk of direct buffer and returns its slice on demand. Direct buffers are reclaimed viaReferenceQueue
in most JDK implementations, and therefore they are deallocated less efficiently than an ordinary heap buffer. Consequently, a user will getOutOfMemoryError
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 Description DirectChannelBufferFactory()
Creates a new factory whose defaultByteOrder
isByteOrder.BIG_ENDIAN
.DirectChannelBufferFactory(int preallocatedBufferCapacity)
Creates a new factory whose defaultByteOrder
isByteOrder.BIG_ENDIAN
.DirectChannelBufferFactory(ByteOrder defaultOrder)
Creates a new factory with the specified defaultByteOrder
.DirectChannelBufferFactory(ByteOrder defaultOrder, int preallocatedBufferCapacity)
Creates a new factory with the specified defaultByteOrder
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ChannelBuffer
getBuffer(ByteBuffer nioBuffer)
Returns aChannelBuffer
whose content is equal to the sub-region of the specifiednioBuffer
.ChannelBuffer
getBuffer(ByteOrder order, byte[] array, int offset, int length)
Returns aChannelBuffer
whose content is equal to the sub-region of the specifiedarray
.ChannelBuffer
getBuffer(ByteOrder order, int capacity)
static ChannelBufferFactory
getInstance()
static ChannelBufferFactory
getInstance(ByteOrder defaultEndianness)
-
Methods inherited from class org.jboss.netty.buffer.AbstractChannelBufferFactory
getBuffer, getBuffer, getDefaultOrder
-
-
-
-
Constructor Detail
-
DirectChannelBufferFactory
public DirectChannelBufferFactory()
Creates a new factory whose defaultByteOrder
isByteOrder.BIG_ENDIAN
.
-
DirectChannelBufferFactory
public DirectChannelBufferFactory(int preallocatedBufferCapacity)
Creates a new factory whose defaultByteOrder
isByteOrder.BIG_ENDIAN
.
-
DirectChannelBufferFactory
public DirectChannelBufferFactory(ByteOrder defaultOrder)
Creates a new factory with the specified defaultByteOrder
.- Parameters:
defaultOrder
- the defaultByteOrder
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
- Parameters:
order
- the endianness of the returnedChannelBuffer
capacity
- the capacity of the returnedChannelBuffer
- Returns:
- a
ChannelBuffer
with the specifiedendianness
andcapacity
, whosereaderIndex
andwriterIndex
are0
-
getBuffer
public ChannelBuffer getBuffer(ByteOrder order, byte[] array, int offset, int length)
Description copied from interface:ChannelBufferFactory
Returns aChannelBuffer
whose content is equal to the sub-region of the specifiedarray
. Depending on the factory implementation, the returned buffer could wrap thearray
or create a new copy of thearray
.- Parameters:
order
- the endianness of the returnedChannelBuffer
array
- the byte arrayoffset
- the offset of the byte arraylength
- the length of the byte array- Returns:
- a
ChannelBuffer
with the specified content, whosereaderIndex
andwriterIndex
are0
and(length - offset)
respectively
-
getBuffer
public ChannelBuffer getBuffer(ByteBuffer nioBuffer)
Description copied from interface:ChannelBufferFactory
Returns aChannelBuffer
whose content is equal to the sub-region of the specifiednioBuffer
. Depending on the factory implementation, the returned buffer could wrap thenioBuffer
or create a new copy of thenioBuffer
.- Parameters:
nioBuffer
- the NIOByteBuffer
- Returns:
- a
ChannelBuffer
with the specified content, whosereaderIndex
andwriterIndex
are0
andnioBuffer.remaining()
respectively
-
-