You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/12/08 01:09:15 UTC

svn commit: r888197 - /mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java

Author: elecharny
Date: Tue Dec  8 00:09:14 2009
New Revision: 888197

URL: http://svn.apache.org/viewvc?rev=888197&view=rev
Log:
Fixed the normalizedCapacity() method (DIRMINA-751), t's now 7 times faster...

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java?rev=888197&r1=888196&r2=888197&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java Tue Dec  8 00:09:14 2009
@@ -19,7 +19,6 @@
  */
 package org.apache.mina.core.buffer;
 
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -41,61 +40,66 @@
 
 import org.apache.mina.core.session.IoSession;
 
-
 /**
  * A byte buffer used by MINA applications.
  * <p>
  * This is a replacement for {@link ByteBuffer}. Please refer to
- * {@link ByteBuffer} documentation for preliminary usage.  MINA does
- * not use NIO {@link ByteBuffer} directly for two reasons:
+ * {@link ByteBuffer} documentation for preliminary usage. MINA does not use NIO
+ * {@link ByteBuffer} directly for two reasons:
  * <ul>
- * <li>It doesn't provide useful getters and putters such as
- * <code>fill</code>, <code>get/putString</code>, and
- * <code>get/putAsciiInt()</code> enough.</li>
- * <li>It is difficult to write variable-length data due to its fixed
- * capacity</li>
+ * <li>It doesn't provide useful getters and putters such as <code>fill</code>,
+ * <code>get/putString</code>, and <code>get/putAsciiInt()</code> enough.</li>
+ * <li>It is difficult to write variable-length data due to its fixed capacity</li>
  * </ul>
  * </p>
- *
+ * 
  * <h2>Allocation</h2>
  * <p>
  * You can allocate a new heap buffer.
+ * 
  * <pre>
  * IoBuffer buf = IoBuffer.allocate(1024, false);
  * </pre>
+ * 
  * you can also allocate a new direct buffer:
+ * 
  * <pre>
  * IoBuffer buf = IoBuffer.allocate(1024, true);
  * </pre>
+ * 
  * or you can set the default buffer type.
+ * 
  * <pre>
  * // Allocate heap buffer by default.
  * IoBuffer.setUseDirectBuffer(false);
  * // A new heap buffer is returned.
  * IoBuffer buf = IoBuffer.allocate(1024);
  * </pre>
+ * 
  * </p>
- *
+ * 
  * <h2>Wrapping existing NIO buffers and arrays</h2>
  * <p>
- * This class provides a few <tt>wrap(...)</tt> methods that wraps
- * any NIO buffers and byte arrays.
- *
+ * This class provides a few <tt>wrap(...)</tt> methods that wraps any NIO
+ * buffers and byte arrays.
+ * 
  * <h2>AutoExpand</h2>
  * <p>
  * Writing variable-length data using NIO <tt>ByteBuffers</tt> is not really
- * easy, and it is because its size is fixed.  {@link IoBuffer} introduces 
- * <tt>autoExpand</tt> property.  If <tt>autoExpand</tt> property is true, you
+ * easy, and it is because its size is fixed. {@link IoBuffer} introduces
+ * <tt>autoExpand</tt> property. If <tt>autoExpand</tt> property is true, you
  * never get {@link BufferOverflowException} or
- * {@link IndexOutOfBoundsException} (except when index is negative).
- * It automatically expands its capacity and limit value.  For example:
+ * {@link IndexOutOfBoundsException} (except when index is negative). It
+ * automatically expands its capacity and limit value. For example:
+ * 
  * <pre>
- * String greeting = messageBundle.getMessage( "hello" );
- * IoBuffer buf = IoBuffer.allocate( 16 );
+ * String greeting = messageBundle.getMessage(&quot;hello&quot;);
+ * IoBuffer buf = IoBuffer.allocate(16);
  * // Turn on autoExpand (it is off by default)
- * buf.setAutoExpand( true );
- * buf.putString( greeting, utf8encoder );
+ * buf.setAutoExpand(true);
+ * buf.putString(greeting, utf8encoder);
  * </pre>
+ * 
  * The underlying {@link ByteBuffer} is reallocated by {@link IoBuffer} behind
  * the scene if the encoded data is larger than 16 bytes in the example above.
  * Its capacity will double, and its limit will increase to the last position
@@ -104,37 +108,37 @@
  * 
  * <h2>AutoShrink</h2>
  * <p>
- * You might also want to decrease the capacity of the buffer when most
- * of the allocated memory area is not being used.  {@link IoBuffer} provides
- * <tt>autoShrink</tt> property to take care of this issue.  If 
- * <tt>autoShrink</tt> is turned on, {@link IoBuffer} halves the capacity
- * of the buffer when {@link #compact()} is invoked and only 1/4 or less of
- * the current capacity is being used.
+ * You might also want to decrease the capacity of the buffer when most of the
+ * allocated memory area is not being used. {@link IoBuffer} provides
+ * <tt>autoShrink</tt> property to take care of this issue. If
+ * <tt>autoShrink</tt> is turned on, {@link IoBuffer} halves the capacity of the
+ * buffer when {@link #compact()} is invoked and only 1/4 or less of the current
+ * capacity is being used.
+ * <p>
+ * You can also {@link #shrink()} method manually to shrink the capacity of the
+ * buffer.
  * <p>
- * You can also {@link #shrink()} method manually to shrink the capacity of
- * the buffer.
- * <p> 
  * The underlying {@link ByteBuffer} is reallocated by {@link IoBuffer} behind
  * the scene, and therefore {@link #buf()} will return a different
- * {@link ByteBuffer} instance once capacity changes.  Please also note
- * {@link #compact()} or {@link #shrink()} will not decrease the capacity if
- * the new capacity is less than the {@link #minimumCapacity()} of the buffer.
- *
+ * {@link ByteBuffer} instance once capacity changes. Please also note
+ * {@link #compact()} or {@link #shrink()} will not decrease the capacity if the
+ * new capacity is less than the {@link #minimumCapacity()} of the buffer.
+ * 
  * <h2>Derived Buffers</h2>
  * <p>
- * Derived buffers are the buffers which were created by
- * {@link #duplicate()}, {@link #slice()}, or {@link #asReadOnlyBuffer()}.
- * They are useful especially when you broadcast the same messages to
- * multiple {@link IoSession}s.  Please note that the buffer derived from and
- * its derived buffers are not both auto-expandable neither auto-shrinkable.
- * Trying to call {@link #setAutoExpand(boolean)} or {@link #setAutoShrink(boolean)}
- * with <tt>true</tt> parameter will raise an {@link IllegalStateException}.
+ * Derived buffers are the buffers which were created by {@link #duplicate()},
+ * {@link #slice()}, or {@link #asReadOnlyBuffer()}. They are useful especially
+ * when you broadcast the same messages to multiple {@link IoSession}s. Please
+ * note that the buffer derived from and its derived buffers are not both
+ * auto-expandable neither auto-shrinkable. Trying to call
+ * {@link #setAutoExpand(boolean)} or {@link #setAutoShrink(boolean)} with
+ * <tt>true</tt> parameter will raise an {@link IllegalStateException}.
  * </p>
- *
+ * 
  * <h2>Changing Buffer Allocation Policy</h2>
  * <p>
  * {@link IoBufferAllocator} interface lets you override the default buffer
- * management behavior.  There are two allocators provided out-of-the-box:
+ * management behavior. There are two allocators provided out-of-the-box:
  * <ul>
  * <li>{@link SimpleBufferAllocator} (default)</li>
  * <li>{@link CachedBufferAllocator}</li>
@@ -142,854 +146,699 @@
  * You can implement your own allocator and use it by calling
  * {@link #setAllocator(IoBufferAllocator)}.
  * </p>
- *
+ * 
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public abstract class IoBuffer implements Comparable<IoBuffer>
-{
+public abstract class IoBuffer implements Comparable<IoBuffer> {
     /** The allocator used to create new buffers */
     private static IoBufferAllocator allocator = new SimpleBufferAllocator();
 
     /** A flag indicating which type of buffer we are using : heap or direct */
     private static boolean useDirectBuffer = false;
 
-
     /**
      * Returns the allocator used by existing and new buffers
      */
-    public static IoBufferAllocator getAllocator()
-    {
+    public static IoBufferAllocator getAllocator() {
         return allocator;
     }
 
-
     /**
      * Sets the allocator used by existing and new buffers
      */
-    public static void setAllocator( IoBufferAllocator newAllocator )
-    {
-        if ( newAllocator == null )
-        {
-            throw new NullPointerException( "allocator" );
+    public static void setAllocator(IoBufferAllocator newAllocator) {
+        if (newAllocator == null) {
+            throw new NullPointerException("allocator");
         }
 
         IoBufferAllocator oldAllocator = allocator;
 
         allocator = newAllocator;
 
-        if ( null != oldAllocator )
-        {
+        if (null != oldAllocator) {
             oldAllocator.dispose();
         }
     }
 
-
     /**
-     * Returns <tt>true</tt> if and only if a direct buffer is allocated
-     * by default when the type of the new buffer is not specified.  The
-     * default value is <tt>false</tt>.
+     * Returns <tt>true</tt> if and only if a direct buffer is allocated by
+     * default when the type of the new buffer is not specified. The default
+     * value is <tt>false</tt>.
      */
-    public static boolean isUseDirectBuffer()
-    {
+    public static boolean isUseDirectBuffer() {
         return useDirectBuffer;
     }
 
-
     /**
-     * Sets if a direct buffer should be allocated by default when the
-     * type of the new buffer is not specified.  The default value is
-     * <tt>false</tt>.
+     * Sets if a direct buffer should be allocated by default when the type of
+     * the new buffer is not specified. The default value is <tt>false</tt>.
      */
-    public static void setUseDirectBuffer( boolean useDirectBuffer )
-    {
+    public static void setUseDirectBuffer(boolean useDirectBuffer) {
         IoBuffer.useDirectBuffer = useDirectBuffer;
     }
 
-
     /**
-     * Returns the direct or heap buffer which is capable to store the
-     * specified amount of bytes.
-     *
-     * @param capacity the capacity of the buffer
-     *
+     * Returns the direct or heap buffer which is capable to store the specified
+     * amount of bytes.
+     * 
+     * @param capacity
+     *            the capacity of the buffer
+     * 
      * @see #setUseDirectBuffer(boolean)
      */
-    public static IoBuffer allocate( int capacity )
-    {
-        return allocate( capacity, useDirectBuffer );
+    public static IoBuffer allocate(int capacity) {
+        return allocate(capacity, useDirectBuffer);
     }
 
-
     /**
      * Returns the buffer which is capable of the specified size.
-     *
-     * @param capacity the capacity of the buffer
-     * @param direct   <tt>true</tt> to get a direct buffer,
-     *                 <tt>false</tt> to get a heap buffer.
-     */
-    public static IoBuffer allocate( int capacity, boolean direct )
-    {
-        if ( capacity < 0 )
-        {
-            throw new IllegalArgumentException( "capacity: " + capacity );
+     * 
+     * @param capacity
+     *            the capacity of the buffer
+     * @param direct
+     *            <tt>true</tt> to get a direct buffer, <tt>false</tt> to get a
+     *            heap buffer.
+     */
+    public static IoBuffer allocate(int capacity, boolean direct) {
+        if (capacity < 0) {
+            throw new IllegalArgumentException("capacity: " + capacity);
         }
 
-        return allocator.allocate( capacity, direct );
+        return allocator.allocate(capacity, direct);
     }
 
-
     /**
      * Wraps the specified NIO {@link ByteBuffer} into MINA buffer.
      */
-    public static IoBuffer wrap( ByteBuffer nioBuffer )
-    {
-        return allocator.wrap( nioBuffer );
+    public static IoBuffer wrap(ByteBuffer nioBuffer) {
+        return allocator.wrap(nioBuffer);
     }
 
-
     /**
      * Wraps the specified byte array into MINA heap buffer.
      */
-    public static IoBuffer wrap( byte[] byteArray )
-    {
-        return wrap( ByteBuffer.wrap( byteArray ) );
+    public static IoBuffer wrap(byte[] byteArray) {
+        return wrap(ByteBuffer.wrap(byteArray));
     }
 
-
     /**
      * Wraps the specified byte array into MINA heap buffer.
      */
-    public static IoBuffer wrap( byte[] byteArray, int offset, int length )
-    {
-        return wrap( ByteBuffer.wrap( byteArray, offset, length ) );
+    public static IoBuffer wrap(byte[] byteArray, int offset, int length) {
+        return wrap(ByteBuffer.wrap(byteArray, offset, length));
     }
 
-
     /**
-     * Normalizes the specified capacity of the buffer to power of 2,
-     * which is often helpful for optimal memory usage and performance. 
-     * If it is greater than or equal to {@link Integer#MAX_VALUE}, it
-     * returns {@link Integer#MAX_VALUE}.  If it is zero, it returns zero.
-     */
-    protected static int normalizeCapacity( int requestedCapacity )
-    {
-        switch ( requestedCapacity )
-        {
-            case 0:
-            case 1 << 0:
-            case 1 << 1:
-            case 1 << 2:
-            case 1 << 3:
-            case 1 << 4:
-            case 1 << 5:
-            case 1 << 6:
-            case 1 << 7:
-            case 1 << 8:
-            case 1 << 9:
-            case 1 << 10:
-            case 1 << 11:
-            case 1 << 12:
-            case 1 << 13:
-            case 1 << 14:
-            case 1 << 15:
-            case 1 << 16:
-            case 1 << 17:
-            case 1 << 18:
-            case 1 << 19:
-            case 1 << 20:
-            case 1 << 21:
-            case 1 << 22:
-            case 1 << 23:
-            case 1 << 24:
-            case 1 << 25:
-            case 1 << 26:
-            case 1 << 27:
-            case 1 << 28:
-            case 1 << 29:
-            case 1 << 30:
-            case Integer.MAX_VALUE:
-                return requestedCapacity;
-        }
-
-        int newCapacity = 1;
-        while ( newCapacity < requestedCapacity )
-        {
-            newCapacity <<= 1;
-            if ( newCapacity < 0 )
-            {
-                return Integer.MAX_VALUE;
-            }
-        }
-        return newCapacity;
+     * Normalizes the specified capacity of the buffer to power of 2, which is
+     * often helpful for optimal memory usage and performance. If it is greater
+     * than or equal to {@link Integer#MAX_VALUE}, it returns
+     * {@link Integer#MAX_VALUE}. If it is zero, it returns zero.
+     */
+    protected static int normalizeCapacity(int requestedCapacity) {
+        int newCapacity = Integer.highestOneBit(requestedCapacity - 1) << 1;
+        return newCapacity < 0 ? Integer.MAX_VALUE : newCapacity;
     }
 
-
     /**
-     * Creates a new instance.  This is an empty constructor.
+     * Creates a new instance. This is an empty constructor.
      */
-    protected IoBuffer()
-    {
+    protected IoBuffer() {
         // Do nothing
     }
 
-
     /**
-     * Declares this buffer and all its derived buffers are not used anymore
-     * so that it can be reused by some {@link IoBufferAllocator} implementations.
-     * It is not mandatory to call this method, but you might want to invoke this
-     * method for maximum performance. 
+     * Declares this buffer and all its derived buffers are not used anymore so
+     * that it can be reused by some {@link IoBufferAllocator} implementations.
+     * It is not mandatory to call this method, but you might want to invoke
+     * this method for maximum performance.
      */
     public abstract void free();
 
-
     /**
      * Returns the underlying NIO buffer instance.
      */
     public abstract ByteBuffer buf();
 
-
     /**
      * @see ByteBuffer#isDirect()
      */
     public abstract boolean isDirect();
 
-
     /**
-     * returns <tt>true</tt> if and only if this buffer is derived from other buffer
-     * via {@link #duplicate()}, {@link #slice()} or {@link #asReadOnlyBuffer()}.
+     * returns <tt>true</tt> if and only if this buffer is derived from other
+     * buffer via {@link #duplicate()}, {@link #slice()} or
+     * {@link #asReadOnlyBuffer()}.
      */
     public abstract boolean isDerived();
 
-
     /**
      * @see ByteBuffer#isReadOnly()
      */
     public abstract boolean isReadOnly();
 
-
     /**
      * Returns the minimum capacity of this buffer which is used to determine
      * the new capacity of the buffer shrunk by {@link #compact()} and
-     * {@link #shrink()} operation.  The default value is the initial capacity
-     * of the buffer.
+     * {@link #shrink()} operation. The default value is the initial capacity of
+     * the buffer.
      */
     public abstract int minimumCapacity();
 
-
     /**
-     * Sets the minimum capacity of this buffer which is used to determine
-     * the new capacity of the buffer shrunk by {@link #compact()} and
-     * {@link #shrink()} operation.  The default value is the initial capacity
-     * of the buffer.
+     * Sets the minimum capacity of this buffer which is used to determine the
+     * new capacity of the buffer shrunk by {@link #compact()} and
+     * {@link #shrink()} operation. The default value is the initial capacity of
+     * the buffer.
      */
-    public abstract IoBuffer minimumCapacity( int minimumCapacity );
-
+    public abstract IoBuffer minimumCapacity(int minimumCapacity);
 
     /**
      * @see ByteBuffer#capacity()
      */
     public abstract int capacity();
 
-
     /**
-     * Increases the capacity of this buffer.  If the new capacity is less than
-     * or equal to the current capacity, this method returns silently.  If the
+     * Increases the capacity of this buffer. If the new capacity is less than
+     * or equal to the current capacity, this method returns silently. If the
      * new capacity is greater than the current capacity, the buffer is
-     * reallocated while retaining the position, limit, mark and the content
-     * of the buffer.
+     * reallocated while retaining the position, limit, mark and the content of
+     * the buffer.
      */
-    public abstract IoBuffer capacity( int newCapacity );
-
+    public abstract IoBuffer capacity(int newCapacity);
 
     /**
      * Returns <tt>true</tt> if and only if <tt>autoExpand</tt> is turned on.
      */
     public abstract boolean isAutoExpand();
 
-
     /**
      * Turns on or off <tt>autoExpand</tt>.
      */
-    public abstract IoBuffer setAutoExpand( boolean autoExpand );
-
+    public abstract IoBuffer setAutoExpand(boolean autoExpand);
 
     /**
      * Returns <tt>true</tt> if and only if <tt>autoShrink</tt> is turned on.
      */
     public abstract boolean isAutoShrink();
 
-
     /**
      * Turns on or off <tt>autoShrink</tt>.
      */
-    public abstract IoBuffer setAutoShrink( boolean autoShrink );
-
+    public abstract IoBuffer setAutoShrink(boolean autoShrink);
 
     /**
-     * Changes the capacity and limit of this buffer so this buffer get
-     * the specified <tt>expectedRemaining</tt> room from the current position.
-     * This method works even if you didn't set <tt>autoExpand</tt> to
-     * <tt>true</tt>.
+     * Changes the capacity and limit of this buffer so this buffer get the
+     * specified <tt>expectedRemaining</tt> room from the current position. This
+     * method works even if you didn't set <tt>autoExpand</tt> to <tt>true</tt>.
      */
-    public abstract IoBuffer expand( int expectedRemaining );
-
+    public abstract IoBuffer expand(int expectedRemaining);
 
     /**
-     * Changes the capacity and limit of this buffer so this buffer get
-     * the specified <tt>expectedRemaining</tt> room from the specified
-     * <tt>position</tt>.
-     * This method works even if you didn't set <tt>autoExpand</tt> to
-     * <tt>true</tt>.
+     * Changes the capacity and limit of this buffer so this buffer get the
+     * specified <tt>expectedRemaining</tt> room from the specified
+     * <tt>position</tt>. This method works even if you didn't set
+     * <tt>autoExpand</tt> to <tt>true</tt>.
      */
-    public abstract IoBuffer expand( int position, int expectedRemaining );
-
+    public abstract IoBuffer expand(int position, int expectedRemaining);
 
     /**
      * Changes the capacity of this buffer so this buffer occupies as less
-     * memory as possible while retaining the position, limit and the
-     * buffer content between the position and limit.  The capacity of the
-     * buffer never becomes less than {@link #minimumCapacity()}.
-     * The mark is discarded once the capacity changes.
+     * memory as possible while retaining the position, limit and the buffer
+     * content between the position and limit. The capacity of the buffer never
+     * becomes less than {@link #minimumCapacity()}. The mark is discarded once
+     * the capacity changes.
      */
     public abstract IoBuffer shrink();
 
-
     /**
      * @see java.nio.Buffer#position()
      */
     public abstract int position();
 
-
     /**
      * @see java.nio.Buffer#position(int)
      */
-    public abstract IoBuffer position( int newPosition );
-
+    public abstract IoBuffer position(int newPosition);
 
     /**
      * @see java.nio.Buffer#limit()
      */
     public abstract int limit();
 
-
     /**
      * @see java.nio.Buffer#limit(int)
      */
-    public abstract IoBuffer limit( int newLimit );
-
+    public abstract IoBuffer limit(int newLimit);
 
     /**
      * @see java.nio.Buffer#mark()
      */
     public abstract IoBuffer mark();
 
-
     /**
-     * Returns the position of the current mark.  This method returns <tt>-1</tt> if no
-     * mark is set.
+     * Returns the position of the current mark. This method returns <tt>-1</tt>
+     * if no mark is set.
      */
     public abstract int markValue();
 
-
     /**
      * @see java.nio.Buffer#reset()
      */
     public abstract IoBuffer reset();
 
-
     /**
      * @see java.nio.Buffer#clear()
      */
     public abstract IoBuffer clear();
 
-
     /**
-     * Clears this buffer and fills its content with <tt>NUL</tt>.
-     * The position is set to zero, the limit is set to the capacity,
-     * and the mark is discarded.
+     * Clears this buffer and fills its content with <tt>NUL</tt>. The position
+     * is set to zero, the limit is set to the capacity, and the mark is
+     * discarded.
      */
     public abstract IoBuffer sweep();
 
-
-    /**double
-     * Clears this buffer and fills its content with <tt>value</tt>.
-     * The position is set to zero, the limit is set to the capacity,
-     * and the mark is discarded.
+    /**
+     * double Clears this buffer and fills its content with <tt>value</tt>. The
+     * position is set to zero, the limit is set to the capacity, and the mark
+     * is discarded.
      */
-    public abstract IoBuffer sweep( byte value );
-
+    public abstract IoBuffer sweep(byte value);
 
     /**
      * @see java.nio.Buffer#flip()
      */
     public abstract IoBuffer flip();
 
-
     /**
      * @see java.nio.Buffer#rewind()
      */
     public abstract IoBuffer rewind();
 
-
     /**
      * @see java.nio.Buffer#remaining()
      */
     public abstract int remaining();
 
-
     /**
      * @see java.nio.Buffer#hasRemaining()
      */
     public abstract boolean hasRemaining();
 
-
     /**
      * @see ByteBuffer#duplicate()
      */
     public abstract IoBuffer duplicate();
 
-
     /**
      * @see ByteBuffer#slice()
      */
     public abstract IoBuffer slice();
 
-
     /**
      * @see ByteBuffer#asReadOnlyBuffer()
      */
     public abstract IoBuffer asReadOnlyBuffer();
 
-
     /**
      * @see ByteBuffer#hasArray()
      */
     public abstract boolean hasArray();
 
-
     /**
      * @see ByteBuffer#array()
      */
     public abstract byte[] array();
 
-
     /**
      * @see ByteBuffer#arrayOffset()
      */
     public abstract int arrayOffset();
 
-
     /**
      * @see ByteBuffer#get()
      */
     public abstract byte get();
 
-
     /**
      * Reads one unsigned byte as a short integer.
      */
     public abstract short getUnsigned();
 
-
     /**
      * @see ByteBuffer#put(byte)
      */
-    public abstract IoBuffer put( byte b );
-
+    public abstract IoBuffer put(byte b);
 
     /**
      * @see ByteBuffer#get(int)
      */
-    public abstract byte get( int index );
-
+    public abstract byte get(int index);
 
     /**
      * Reads one byte as an unsigned short integer.
      */
-    public abstract short getUnsigned( int index );
-
+    public abstract short getUnsigned(int index);
 
     /**
      * @see ByteBuffer#put(int, byte)
      */
-    public abstract IoBuffer put( int index, byte b );
-
+    public abstract IoBuffer put(int index, byte b);
 
     /**
      * @see ByteBuffer#get(byte[], int, int)
      */
-    public abstract IoBuffer get( byte[] dst, int offset, int length );
-
+    public abstract IoBuffer get(byte[] dst, int offset, int length);
 
     /**
      * @see ByteBuffer#get(byte[])
      */
-    public abstract IoBuffer get( byte[] dst );
-
+    public abstract IoBuffer get(byte[] dst);
 
     /**
      * TODO document me.
      */
-    public abstract IoBuffer getSlice( int index, int length );
-
+    public abstract IoBuffer getSlice(int index, int length);
 
     /**
      * TODO document me.
      */
-    public abstract IoBuffer getSlice( int length );
-
+    public abstract IoBuffer getSlice(int length);
 
     /**
      * Writes the content of the specified <tt>src</tt> into this buffer.
      */
-    public abstract IoBuffer put( ByteBuffer src );
-
+    public abstract IoBuffer put(ByteBuffer src);
 
     /**
      * Writes the content of the specified <tt>src</tt> into this buffer.
      */
-    public abstract IoBuffer put( IoBuffer src );
-
+    public abstract IoBuffer put(IoBuffer src);
 
     /**
      * @see ByteBuffer#put(byte[], int, int)
      */
-    public abstract IoBuffer put( byte[] src, int offset, int length );
-
+    public abstract IoBuffer put(byte[] src, int offset, int length);
 
     /**
      * @see ByteBuffer#put(byte[])
      */
-    public abstract IoBuffer put( byte[] src );
-
+    public abstract IoBuffer put(byte[] src);
 
     /**
      * @see ByteBuffer#compact()
      */
     public abstract IoBuffer compact();
 
-
     /**
      * @see ByteBuffer#order()
      */
     public abstract ByteOrder order();
 
-
     /**
      * @see ByteBuffer#order(ByteOrder)
      */
-    public abstract IoBuffer order( ByteOrder bo );
-
+    public abstract IoBuffer order(ByteOrder bo);
 
     /**
      * @see ByteBuffer#getChar()
      */
     public abstract char getChar();
 
-
     /**
      * @see ByteBuffer#putChar(char)
      */
-    public abstract IoBuffer putChar( char value );
-
+    public abstract IoBuffer putChar(char value);
 
     /**
      * @see ByteBuffer#getChar(int)
      */
-    public abstract char getChar( int index );
-
+    public abstract char getChar(int index);
 
     /**
      * @see ByteBuffer#putChar(int, char)
      */
-    public abstract IoBuffer putChar( int index, char value );
-
+    public abstract IoBuffer putChar(int index, char value);
 
     /**
      * @see ByteBuffer#asCharBuffer()
      */
     public abstract CharBuffer asCharBuffer();
 
-
     /**
      * @see ByteBuffer#getShort()
      */
     public abstract short getShort();
 
-
     /**
      * Reads two bytes unsigned integer.
      */
     public abstract int getUnsignedShort();
 
-
     /**
      * @see ByteBuffer#putShort(short)
      */
-    public abstract IoBuffer putShort( short value );
-
+    public abstract IoBuffer putShort(short value);
 
     /**
      * @see ByteBuffer#getShort()
      */
-    public abstract short getShort( int index );
-
+    public abstract short getShort(int index);
 
     /**
      * Reads two bytes unsigned integer.
      */
-    public abstract int getUnsignedShort( int index );
-
+    public abstract int getUnsignedShort(int index);
 
     /**
      * @see ByteBuffer#putShort(int, short)
      */
-    public abstract IoBuffer putShort( int index, short value );
-
+    public abstract IoBuffer putShort(int index, short value);
 
     /**
      * @see ByteBuffer#asShortBuffer()
      */
     public abstract ShortBuffer asShortBuffer();
 
-
     /**
      * @see ByteBuffer#getInt()
      */
     public abstract int getInt();
 
-
     /**
      * Reads four bytes unsigned integer.
      */
     public abstract long getUnsignedInt();
 
-
     /**
      * Relative <i>get</i> method for reading a medium int value.
-     *
-     * <p> Reads the next three bytes at this buffer's current position,
-     * composing them into an int value according to the current byte order,
-     * and then increments the position by three.</p>
-     *
-     * @return  The medium int value at the buffer's current position
+     * 
+     * <p>
+     * Reads the next three bytes at this buffer's current position, composing
+     * them into an int value according to the current byte order, and then
+     * increments the position by three.
+     * </p>
+     * 
+     * @return The medium int value at the buffer's current position
      */
     public abstract int getMediumInt();
 
-
     /**
      * Relative <i>get</i> method for reading an unsigned medium int value.
-     *
-     * <p> Reads the next three bytes at this buffer's current position,
-     * composing them into an int value according to the current byte order,
-     * and then increments the position by three.</p>
-     *
-     * @return  The unsigned medium int value at the buffer's current position
+     * 
+     * <p>
+     * Reads the next three bytes at this buffer's current position, composing
+     * them into an int value according to the current byte order, and then
+     * increments the position by three.
+     * </p>
+     * 
+     * @return The unsigned medium int value at the buffer's current position
      */
     public abstract int getUnsignedMediumInt();
 
-
     /**
      * Absolute <i>get</i> method for reading a medium int value.
-     *
-     * <p> Reads the next three bytes at this buffer's current position,
-     * composing them into an int value according to the current byte order.</p>
-     *
-     * @param index  The index from which the medium int will be read
-     * @return  The medium int value at the given index
-     *
-     * @throws  IndexOutOfBoundsException
-     *          If <tt>index</tt> is negative
-     *          or not smaller than the buffer's limit
+     * 
+     * <p>
+     * Reads the next three bytes at this buffer's current position, composing
+     * them into an int value according to the current byte order.
+     * </p>
+     * 
+     * @param index
+     *            The index from which the medium int will be read
+     * @return The medium int value at the given index
+     * 
+     * @throws IndexOutOfBoundsException
+     *             If <tt>index</tt> is negative or not smaller than the
+     *             buffer's limit
      */
-    public abstract int getMediumInt( int index );
-
+    public abstract int getMediumInt(int index);
 
     /**
      * Absolute <i>get</i> method for reading an unsigned medium int value.
-     *
-     * <p> Reads the next three bytes at this buffer's current position,
-     * composing them into an int value according to the current byte order.</p>
-     *
-     * @param index  The index from which the unsigned medium int will be read
-     * @return  The unsigned medium int value at the given index
-     *
-     * @throws  IndexOutOfBoundsException
-     *          If <tt>index</tt> is negative
-     *          or not smaller than the buffer's limit
-     */
-    public abstract int getUnsignedMediumInt( int index );
-
+     * 
+     * <p>
+     * Reads the next three bytes at this buffer's current position, composing
+     * them into an int value according to the current byte order.
+     * </p>
+     * 
+     * @param index
+     *            The index from which the unsigned medium int will be read
+     * @return The unsigned medium int value at the given index
+     * 
+     * @throws IndexOutOfBoundsException
+     *             If <tt>index</tt> is negative or not smaller than the
+     *             buffer's limit
+     */
+    public abstract int getUnsignedMediumInt(int index);
 
     /**
-     * Relative <i>put</i> method for writing a medium int
-     * value.
-     *
-     * <p> Writes three bytes containing the given int value, in the
-     * current byte order, into this buffer at the current position, and then
-     * increments the position by three.</p>
-     *
-     * @param  value
-     *         The medium int value to be written
-     *
-     * @return  This buffer
-     *
-     * @throws  BufferOverflowException
-     *          If there are fewer than three bytes
-     *          remaining in this buffer
-     *
-     * @throws  ReadOnlyBufferException
-     *          If this buffer is read-only
-     */
-    public abstract IoBuffer putMediumInt( int value );
-
+     * Relative <i>put</i> method for writing a medium int value.
+     * 
+     * <p>
+     * Writes three bytes containing the given int value, in the current byte
+     * order, into this buffer at the current position, and then increments the
+     * position by three.
+     * </p>
+     * 
+     * @param value
+     *            The medium int value to be written
+     * 
+     * @return This buffer
+     * 
+     * @throws BufferOverflowException
+     *             If there are fewer than three bytes remaining in this buffer
+     * 
+     * @throws ReadOnlyBufferException
+     *             If this buffer is read-only
+     */
+    public abstract IoBuffer putMediumInt(int value);
 
     /**
-     * Absolute <i>put</i> method for writing a medium int
-     * value.
-     *
-     * <p> Writes three bytes containing the given int value, in the
-     * current byte order, into this buffer at the given index.</p>
-     *
-     * @param  index
-     *         The index at which the bytes will be written
-     *
-     * @param  value
-     *         The medium int value to be written
-     *
-     * @return  This buffer
-     *
-     * @throws  IndexOutOfBoundsException
-     *          If <tt>index</tt> is negative
-     *          or not smaller than the buffer's limit,
-     *          minus three
-     *
-     * @throws  ReadOnlyBufferException
-     *          If this buffer is read-only
+     * Absolute <i>put</i> method for writing a medium int value.
+     * 
+     * <p>
+     * Writes three bytes containing the given int value, in the current byte
+     * order, into this buffer at the given index.
+     * </p>
+     * 
+     * @param index
+     *            The index at which the bytes will be written
+     * 
+     * @param value
+     *            The medium int value to be written
+     * 
+     * @return This buffer
+     * 
+     * @throws IndexOutOfBoundsException
+     *             If <tt>index</tt> is negative or not smaller than the
+     *             buffer's limit, minus three
+     * 
+     * @throws ReadOnlyBufferException
+     *             If this buffer is read-only
      */
-    public abstract IoBuffer putMediumInt( int index, int value );
-
+    public abstract IoBuffer putMediumInt(int index, int value);
 
     /**
      * @see ByteBuffer#putInt(int)
      */
-    public abstract IoBuffer putInt( int value );
-
+    public abstract IoBuffer putInt(int value);
 
     /**
      * @see ByteBuffer#getInt(int)
      */
-    public abstract int getInt( int index );
-
+    public abstract int getInt(int index);
 
     /**
      * Reads four bytes unsigned integer.
      */
-    public abstract long getUnsignedInt( int index );
-
+    public abstract long getUnsignedInt(int index);
 
     /**
      * @see ByteBuffer#putInt(int, int)
      */
-    public abstract IoBuffer putInt( int index, int value );
-
+    public abstract IoBuffer putInt(int index, int value);
 
     /**
      * @see ByteBuffer#asIntBuffer()
      */
     public abstract IntBuffer asIntBuffer();
 
-
     /**
      * @see ByteBuffer#getLong()
      */
     public abstract long getLong();
 
-
     /**
      * @see ByteBuffer#putLong(int, long)
      */
-    public abstract IoBuffer putLong( long value );
-
+    public abstract IoBuffer putLong(long value);
 
     /**
      * @see ByteBuffer#getLong(int)
      */
-    public abstract long getLong( int index );
-
+    public abstract long getLong(int index);
 
     /**
      * @see ByteBuffer#putLong(int, long)
      */
-    public abstract IoBuffer putLong( int index, long value );
-
+    public abstract IoBuffer putLong(int index, long value);
 
     /**
      * @see ByteBuffer#asLongBuffer()
      */
     public abstract LongBuffer asLongBuffer();
 
-
     /**
      * @see ByteBuffer#getFloat()
      */
     public abstract float getFloat();
 
-
     /**
      * @see ByteBuffer#putFloat(float)
      */
-    public abstract IoBuffer putFloat( float value );
-
+    public abstract IoBuffer putFloat(float value);
 
     /**
      * @see ByteBuffer#getFloat(int)
      */
-    public abstract float getFloat( int index );
-
+    public abstract float getFloat(int index);
 
     /**
      * @see ByteBuffer#putFloat(int, float)
      */
-    public abstract IoBuffer putFloat( int index, float value );
-
+    public abstract IoBuffer putFloat(int index, float value);
 
     /**
      * @see ByteBuffer#asFloatBuffer()
      */
     public abstract FloatBuffer asFloatBuffer();
 
-
     /**
      * @see ByteBuffer#getDouble()
      */
     public abstract double getDouble();
 
-
     /**
      * @see ByteBuffer#putDouble(double)
      */
-    public abstract IoBuffer putDouble( double value );
-
+    public abstract IoBuffer putDouble(double value);
 
     /**
      * @see ByteBuffer#getDouble(int)
      */
-    public abstract double getDouble( int index );
-
+    public abstract double getDouble(int index);
 
     /**
      * @see ByteBuffer#putDouble(int, double)
      */
-    public abstract IoBuffer putDouble( int index, double value );
-
+    public abstract IoBuffer putDouble(int index, double value);
 
     /**
      * @see ByteBuffer#asDoubleBuffer()
      */
     public abstract DoubleBuffer asDoubleBuffer();
 
-
     /**
      * Returns an {@link InputStream} that reads the data from this buffer.
      * {@link InputStream#read()} returns <tt>-1</tt> if the buffer position
@@ -997,161 +846,168 @@
      */
     public abstract InputStream asInputStream();
 
-
     /**
      * Returns an {@link OutputStream} that appends the data into this buffer.
      * Please note that the {@link OutputStream#write(int)} will throw a
-     * {@link BufferOverflowException} instead of an {@link IOException}
-     * in case of buffer overflow.  Please set <tt>autoExpand</tt> property by
-     * calling {@link #setAutoExpand(boolean)} to prevent the unexpected runtime
+     * {@link BufferOverflowException} instead of an {@link IOException} in case
+     * of buffer overflow. Please set <tt>autoExpand</tt> property by calling
+     * {@link #setAutoExpand(boolean)} to prevent the unexpected runtime
      * exception.
      */
     public abstract OutputStream asOutputStream();
 
-
     /**
-     * Returns hexdump of this buffer.  The data and pointer are
-     * not changed as a result of this method call.
-     *
-     * @return
-     *  hexidecimal representation of this buffer
+     * Returns hexdump of this buffer. The data and pointer are not changed as a
+     * result of this method call.
+     * 
+     * @return hexidecimal representation of this buffer
      */
     public abstract String getHexDump();
 
-
     /**
      * Return hexdump of this buffer with limited length.
-     *
-     * @param lengthLimit The maximum number of bytes to dump from
-     *                    the current buffer position.
-     * @return
-     *  hexidecimal representation of this buffer
+     * 
+     * @param lengthLimit
+     *            The maximum number of bytes to dump from the current buffer
+     *            position.
+     * @return hexidecimal representation of this buffer
      */
-    public abstract String getHexDump( int lengthLimit );
+    public abstract String getHexDump(int lengthLimit);
 
-
-    ////////////////////////////////
+    // //////////////////////////////
     // String getters and putters //
-    ////////////////////////////////
+    // //////////////////////////////
 
     /**
      * Reads a <code>NUL</code>-terminated string from this buffer using the
-     * specified <code>decoder</code> and returns it.  This method reads
-     * until the limit of this buffer if no <tt>NUL</tt> is found.
+     * specified <code>decoder</code> and returns it. This method reads until
+     * the limit of this buffer if no <tt>NUL</tt> is found.
      */
-    public abstract String getString( CharsetDecoder decoder ) throws CharacterCodingException;
-
+    public abstract String getString(CharsetDecoder decoder)
+            throws CharacterCodingException;
 
     /**
      * Reads a <code>NUL</code>-terminated string from this buffer using the
      * specified <code>decoder</code> and returns it.
-     *
-     * @param fieldSize the maximum number of bytes to read
+     * 
+     * @param fieldSize
+     *            the maximum number of bytes to read
      */
-    public abstract String getString( int fieldSize, CharsetDecoder decoder ) throws CharacterCodingException;
-
+    public abstract String getString(int fieldSize, CharsetDecoder decoder)
+            throws CharacterCodingException;
 
     /**
      * Writes the content of <code>in</code> into this buffer using the
-     * specified <code>encoder</code>.  This method doesn't terminate
-     * string with <tt>NUL</tt>.  You have to do it by yourself.
-     *
-     * @throws BufferOverflowException if the specified string doesn't fit
+     * specified <code>encoder</code>. This method doesn't terminate string with
+     * <tt>NUL</tt>. You have to do it by yourself.
+     * 
+     * @throws BufferOverflowException
+     *             if the specified string doesn't fit
      */
-    public abstract IoBuffer putString( CharSequence val, CharsetEncoder encoder ) throws CharacterCodingException;
-
+    public abstract IoBuffer putString(CharSequence val, CharsetEncoder encoder)
+            throws CharacterCodingException;
 
     /**
      * Writes the content of <code>in</code> into this buffer as a
      * <code>NUL</code>-terminated string using the specified
      * <code>encoder</code>.
      * <p>
-     * If the charset name of the encoder is UTF-16, you cannot specify
-     * odd <code>fieldSize</code>, and this method will append two
-     * <code>NUL</code>s as a terminator.
+     * If the charset name of the encoder is UTF-16, you cannot specify odd
+     * <code>fieldSize</code>, and this method will append two <code>NUL</code>s
+     * as a terminator.
      * <p>
-     * Please note that this method doesn't terminate with <code>NUL</code>
-     * if the input string is longer than <tt>fieldSize</tt>.
-     *
-     * @param fieldSize the maximum number of bytes to write
-     */
-    public abstract IoBuffer putString( CharSequence val, int fieldSize, CharsetEncoder encoder )
-        throws CharacterCodingException;
-
-
-    /**
-     * Reads a string which has a 16-bit length field before the actual
-     * encoded string, using the specified <code>decoder</code> and returns it.
-     * This method is a shortcut for <tt>getPrefixedString(2, decoder)</tt>.
-     */
-    public abstract String getPrefixedString( CharsetDecoder decoder ) throws CharacterCodingException;
-
-
-    /**
-     * Reads a string which has a length field before the actual
-     * encoded string, using the specified <code>decoder</code> and returns it.
-     *
-     * @param prefixLength the length of the length field (1, 2, or 4)
-     */
-    public abstract String getPrefixedString( int prefixLength, CharsetDecoder decoder )
-        throws CharacterCodingException;
-
-
-    /**
-     * Writes the content of <code>in</code> into this buffer as a
-     * string which has a 16-bit length field before the actual
-     * encoded string, using the specified <code>encoder</code>.
-     * This method is a shortcut for <tt>putPrefixedString(in, 2, 0, encoder)</tt>.
-     *
-     * @throws BufferOverflowException if the specified string doesn't fit
-     */
-    public abstract IoBuffer putPrefixedString( CharSequence in, CharsetEncoder encoder )
-        throws CharacterCodingException;
-
-
-    /**
-     * Writes the content of <code>in</code> into this buffer as a
-     * string which has a 16-bit length field before the actual
-     * encoded string, using the specified <code>encoder</code>.
-     * This method is a shortcut for <tt>putPrefixedString(in, prefixLength, 0, encoder)</tt>.
-     *
-     * @param prefixLength the length of the length field (1, 2, or 4)
-     *
-     * @throws BufferOverflowException if the specified string doesn't fit
-     */
-    public abstract IoBuffer putPrefixedString( CharSequence in, int prefixLength, CharsetEncoder encoder )
-        throws CharacterCodingException;
-
-
-    /**
-     * Writes the content of <code>in</code> into this buffer as a
-     * string which has a 16-bit length field before the actual
-     * encoded string, using the specified <code>encoder</code>.
-     * This method is a shortcut for <tt>putPrefixedString(in, prefixLength, padding, ( byte ) 0, encoder)</tt>.
-     *
-     * @param prefixLength the length of the length field (1, 2, or 4)
-     * @param padding      the number of padded <tt>NUL</tt>s (1 (or 0), 2, or 4)
-     *
-     * @throws BufferOverflowException if the specified string doesn't fit
-     */
-    public abstract IoBuffer putPrefixedString( CharSequence in, int prefixLength, int padding, CharsetEncoder encoder )
-        throws CharacterCodingException;
-
-
-    /**
-     * Writes the content of <code>in</code> into this buffer as a
-     * string which has a 16-bit length field before the actual
-     * encoded string, using the specified <code>encoder</code>.
-     *
-     * @param prefixLength the length of the length field (1, 2, or 4)
-     * @param padding      the number of padded bytes (1 (or 0), 2, or 4)
-     * @param padValue     the value of padded bytes
-     *
-     * @throws BufferOverflowException if the specified string doesn't fit
-     */
-    public abstract IoBuffer putPrefixedString( CharSequence val, int prefixLength, int padding, byte padValue,
-        CharsetEncoder encoder ) throws CharacterCodingException;
-
+     * Please note that this method doesn't terminate with <code>NUL</code> if
+     * the input string is longer than <tt>fieldSize</tt>.
+     * 
+     * @param fieldSize
+     *            the maximum number of bytes to write
+     */
+    public abstract IoBuffer putString(CharSequence val, int fieldSize,
+            CharsetEncoder encoder) throws CharacterCodingException;
+
+    /**
+     * Reads a string which has a 16-bit length field before the actual encoded
+     * string, using the specified <code>decoder</code> and returns it. This
+     * method is a shortcut for <tt>getPrefixedString(2, decoder)</tt>.
+     */
+    public abstract String getPrefixedString(CharsetDecoder decoder)
+            throws CharacterCodingException;
+
+    /**
+     * Reads a string which has a length field before the actual encoded string,
+     * using the specified <code>decoder</code> and returns it.
+     * 
+     * @param prefixLength
+     *            the length of the length field (1, 2, or 4)
+     */
+    public abstract String getPrefixedString(int prefixLength,
+            CharsetDecoder decoder) throws CharacterCodingException;
+
+    /**
+     * Writes the content of <code>in</code> into this buffer as a string which
+     * has a 16-bit length field before the actual encoded string, using the
+     * specified <code>encoder</code>. This method is a shortcut for
+     * <tt>putPrefixedString(in, 2, 0, encoder)</tt>.
+     * 
+     * @throws BufferOverflowException
+     *             if the specified string doesn't fit
+     */
+    public abstract IoBuffer putPrefixedString(CharSequence in,
+            CharsetEncoder encoder) throws CharacterCodingException;
+
+    /**
+     * Writes the content of <code>in</code> into this buffer as a string which
+     * has a 16-bit length field before the actual encoded string, using the
+     * specified <code>encoder</code>. This method is a shortcut for
+     * <tt>putPrefixedString(in, prefixLength, 0, encoder)</tt>.
+     * 
+     * @param prefixLength
+     *            the length of the length field (1, 2, or 4)
+     * 
+     * @throws BufferOverflowException
+     *             if the specified string doesn't fit
+     */
+    public abstract IoBuffer putPrefixedString(CharSequence in,
+            int prefixLength, CharsetEncoder encoder)
+            throws CharacterCodingException;
+
+    /**
+     * Writes the content of <code>in</code> into this buffer as a string which
+     * has a 16-bit length field before the actual encoded string, using the
+     * specified <code>encoder</code>. This method is a shortcut for
+     * <tt>putPrefixedString(in, prefixLength, padding, ( byte ) 0, encoder)</tt>
+     * .
+     * 
+     * @param prefixLength
+     *            the length of the length field (1, 2, or 4)
+     * @param padding
+     *            the number of padded <tt>NUL</tt>s (1 (or 0), 2, or 4)
+     * 
+     * @throws BufferOverflowException
+     *             if the specified string doesn't fit
+     */
+    public abstract IoBuffer putPrefixedString(CharSequence in,
+            int prefixLength, int padding, CharsetEncoder encoder)
+            throws CharacterCodingException;
+
+    /**
+     * Writes the content of <code>in</code> into this buffer as a string which
+     * has a 16-bit length field before the actual encoded string, using the
+     * specified <code>encoder</code>.
+     * 
+     * @param prefixLength
+     *            the length of the length field (1, 2, or 4)
+     * @param padding
+     *            the number of padded bytes (1 (or 0), 2, or 4)
+     * @param padValue
+     *            the value of padded bytes
+     * 
+     * @throws BufferOverflowException
+     *             if the specified string doesn't fit
+     */
+    public abstract IoBuffer putPrefixedString(CharSequence val,
+            int prefixLength, int padding, byte padValue, CharsetEncoder encoder)
+            throws CharacterCodingException;
 
     /**
      * Reads a Java object from the buffer using the context {@link ClassLoader}
@@ -1159,392 +1015,452 @@
      */
     public abstract Object getObject() throws ClassNotFoundException;
 
-
     /**
-     * Reads a Java object from the buffer using the specified <tt>classLoader</tt>.
+     * Reads a Java object from the buffer using the specified
+     * <tt>classLoader</tt>.
      */
-    public abstract Object getObject( final ClassLoader classLoader ) throws ClassNotFoundException;
-
+    public abstract Object getObject(final ClassLoader classLoader)
+            throws ClassNotFoundException;
 
     /**
      * Writes the specified Java object to the buffer.
      */
-    public abstract IoBuffer putObject( Object o );
-
+    public abstract IoBuffer putObject(Object o);
 
     /**
      * Returns <tt>true</tt> if this buffer contains a data which has a data
      * length as a prefix and the buffer has remaining data as enough as
-     * specified in the data length field.  This method is identical with
-     * <tt>prefixedDataAvailable( prefixLength, Integer.MAX_VALUE )</tt>.
-     * Please not that using this method can allow DoS (Denial of Service)
-     * attack in case the remote peer sends too big data length value.
-     * It is recommended to use {@link #prefixedDataAvailable(int, int)}
-     * instead.
-     *
-     * @param prefixLength the length of the prefix field (1, 2, or 4)
-     *
-     * @throws IllegalArgumentException if prefixLength is wrong
-     * @throws BufferDataException      if data length is negative
+     * specified in the data length field. This method is identical with
+     * <tt>prefixedDataAvailable( prefixLength, Integer.MAX_VALUE )</tt>. Please
+     * not that using this method can allow DoS (Denial of Service) attack in
+     * case the remote peer sends too big data length value. It is recommended
+     * to use {@link #prefixedDataAvailable(int, int)} instead.
+     * 
+     * @param prefixLength
+     *            the length of the prefix field (1, 2, or 4)
+     * 
+     * @throws IllegalArgumentException
+     *             if prefixLength is wrong
+     * @throws BufferDataException
+     *             if data length is negative
      */
-    public abstract boolean prefixedDataAvailable( int prefixLength );
-
+    public abstract boolean prefixedDataAvailable(int prefixLength);
 
     /**
      * Returns <tt>true</tt> if this buffer contains a data which has a data
      * length as a prefix and the buffer has remaining data as enough as
      * specified in the data length field.
-     *
-     * @param prefixLength  the length of the prefix field (1, 2, or 4)
-     * @param maxDataLength the allowed maximum of the read data length
-     *
-     * @throws IllegalArgumentException if prefixLength is wrong
-     * @throws BufferDataException      if data length is negative or greater then <tt>maxDataLength</tt>
+     * 
+     * @param prefixLength
+     *            the length of the prefix field (1, 2, or 4)
+     * @param maxDataLength
+     *            the allowed maximum of the read data length
+     * 
+     * @throws IllegalArgumentException
+     *             if prefixLength is wrong
+     * @throws BufferDataException
+     *             if data length is negative or greater then
+     *             <tt>maxDataLength</tt>
      */
-    public abstract boolean prefixedDataAvailable( int prefixLength, int maxDataLength );
+    public abstract boolean prefixedDataAvailable(int prefixLength,
+            int maxDataLength);
 
-
-    /////////////////////
+    // ///////////////////
     // IndexOf methods //
-    /////////////////////
+    // ///////////////////
 
     /**
-     * Returns the first occurence position of the specified byte from the current position to
-     * the current limit.
-     *
+     * Returns the first occurence position of the specified byte from the
+     * current position to the current limit.
+     * 
      * @return <tt>-1</tt> if the specified byte is not found
      */
-    public abstract int indexOf( byte b );
-
+    public abstract int indexOf(byte b);
 
-    //////////////////////////
+    // ////////////////////////
     // Skip or fill methods //
-    //////////////////////////
+    // ////////////////////////
 
     /**
      * Forwards the position of this buffer as the specified <code>size</code>
      * bytes.
      */
-    public abstract IoBuffer skip( int size );
-
+    public abstract IoBuffer skip(int size);
 
     /**
-     * Fills this buffer with the specified value.
-     * This method moves buffer position forward.
+     * Fills this buffer with the specified value. This method moves buffer
+     * position forward.
      */
-    public abstract IoBuffer fill( byte value, int size );
-
+    public abstract IoBuffer fill(byte value, int size);
 
     /**
-     * Fills this buffer with the specified value.
-     * This method does not change buffer position.
+     * Fills this buffer with the specified value. This method does not change
+     * buffer position.
      */
-    public abstract IoBuffer fillAndReset( byte value, int size );
-
+    public abstract IoBuffer fillAndReset(byte value, int size);
 
     /**
-     * Fills this buffer with <code>NUL (0x00)</code>.
-     * This method moves buffer position forward.
+     * Fills this buffer with <code>NUL (0x00)</code>. This method moves buffer
+     * position forward.
      */
-    public abstract IoBuffer fill( int size );
-
+    public abstract IoBuffer fill(int size);
 
     /**
-     * Fills this buffer with <code>NUL (0x00)</code>.
-     * This method does not change buffer position.
+     * Fills this buffer with <code>NUL (0x00)</code>. This method does not
+     * change buffer position.
      */
-    public abstract IoBuffer fillAndReset( int size );
+    public abstract IoBuffer fillAndReset(int size);
 
-
-    //////////////////////////
-    // Enum methods         //
-    //////////////////////////
+    // ////////////////////////
+    // Enum methods //
+    // ////////////////////////
 
     /**
-     * Reads a byte from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param enumClass  The enum's class object
+     * Reads a byte from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnum( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnum(Class<E> enumClass);
 
     /**
-     * Reads a byte from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param index  the index from which the byte will be read
-     * @param enumClass  The enum's class object
+     * Reads a byte from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param index
+     *            the index from which the byte will be read
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnum( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnum(int index, Class<E> enumClass);
 
     /**
-     * Reads a short from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param enumClass  The enum's class object
+     * Reads a short from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnumShort( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnumShort(Class<E> enumClass);
 
     /**
-     * Reads a short from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param index  the index from which the bytes will be read
-     * @param enumClass  The enum's class object
+     * Reads a short from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param index
+     *            the index from which the bytes will be read
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnumShort( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnumShort(int index,
+            Class<E> enumClass);
 
     /**
-     * Reads an int from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param enumClass  The enum's class object
+     * Reads an int from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnumInt( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnumInt(Class<E> enumClass);
 
     /**
-     * Reads an int from the buffer and returns the correlating enum constant defined
-     * by the specified enum type.
-     *
-     * @param <E> The enum type to return
-     * @param index  the index from which the bytes will be read
-     * @param enumClass  The enum's class object
+     * Reads an int from the buffer and returns the correlating enum constant
+     * defined by the specified enum type.
+     * 
+     * @param <E>
+     *            The enum type to return
+     * @param index
+     *            the index from which the bytes will be read
+     * @param enumClass
+     *            The enum's class object
      */
-    public abstract <E extends Enum<E>> E getEnumInt( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> E getEnumInt(int index,
+            Class<E> enumClass);
 
     /**
      * Writes an enum's ordinal value to the buffer as a byte.
-     *
-     * @param e  The enum to write to the buffer
+     * 
+     * @param e
+     *            The enum to write to the buffer
      */
-    public abstract IoBuffer putEnum( Enum<?> e );
-
+    public abstract IoBuffer putEnum(Enum<?> e);
 
     /**
      * Writes an enum's ordinal value to the buffer as a byte.
-     *
-     * @param index The index at which the byte will be written
-     * @param e  The enum to write to the buffer
+     * 
+     * @param index
+     *            The index at which the byte will be written
+     * @param e
+     *            The enum to write to the buffer
      */
-    public abstract IoBuffer putEnum( int index, Enum<?> e );
-
+    public abstract IoBuffer putEnum(int index, Enum<?> e);
 
     /**
      * Writes an enum's ordinal value to the buffer as a short.
-     *
-     * @param e  The enum to write to the buffer
+     * 
+     * @param e
+     *            The enum to write to the buffer
      */
-    public abstract IoBuffer putEnumShort( Enum<?> e );
-
+    public abstract IoBuffer putEnumShort(Enum<?> e);
 
     /**
      * Writes an enum's ordinal value to the buffer as a short.
-     *
-     * @param index The index at which the bytes will be written
-     * @param e  The enum to write to the buffer
+     * 
+     * @param index
+     *            The index at which the bytes will be written
+     * @param e
+     *            The enum to write to the buffer
      */
-    public abstract IoBuffer putEnumShort( int index, Enum<?> e );
-
+    public abstract IoBuffer putEnumShort(int index, Enum<?> e);
 
     /**
      * Writes an enum's ordinal value to the buffer as an integer.
-     *
-     * @param e  The enum to write to the buffer
+     * 
+     * @param e
+     *            The enum to write to the buffer
      */
-    public abstract IoBuffer putEnumInt( Enum<?> e );
-
+    public abstract IoBuffer putEnumInt(Enum<?> e);
 
     /**
      * Writes an enum's ordinal value to the buffer as an integer.
-     *
-     * @param index The index at which the bytes will be written
-     * @param e  The enum to write to the buffer
-     */
-    public abstract IoBuffer putEnumInt( int index, Enum<?> e );
-
-
-    //////////////////////////
-    // EnumSet methods      //
-    //////////////////////////
+     * 
+     * @param index
+     *            The index at which the bytes will be written
+     * @param e
+     *            The enum to write to the buffer
+     */
+    public abstract IoBuffer putEnumInt(int index, Enum<?> e);
+
+    // ////////////////////////
+    // EnumSet methods //
+    // ////////////////////////
 
     /**
      * Reads a byte sized bit vector and converts it to an {@link EnumSet}.
-     *
-     * <p>Each bit is mapped to a value in the specified enum.  The least significant
-     * bit maps to the first entry in the specified enum and each subsequent bit maps
-     * to each subsequent bit as mapped to the subsequent enum value.</p>
-     *
-     * @param <E>  the enum type
-     * @param enumClass  the enum class used to create the EnumSet
+     * 
+     * <p>
+     * Each bit is mapped to a value in the specified enum. The least
+     * significant bit maps to the first entry in the specified enum and each
+     * subsequent bit maps to each subsequent bit as mapped to the subsequent
+     * enum value.
+     * </p>
+     * 
+     * @param <E>
+     *            the enum type
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSet( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSet(Class<E> enumClass);
 
     /**
      * Reads a byte sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param index  the index from which the byte will be read
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param index
+     *            the index from which the byte will be read
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSet( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSet(int index,
+            Class<E> enumClass);
 
     /**
      * Reads a short sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort(
+            Class<E> enumClass);
 
     /**
      * Reads a short sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param index  the index from which the bytes will be read
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param index
+     *            the index from which the bytes will be read
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort(int index,
+            Class<E> enumClass);
 
     /**
      * Reads an int sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt(
+            Class<E> enumClass);
 
     /**
      * Reads an int sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param index  the index from which the bytes will be read
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param index
+     *            the index from which the bytes will be read
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt( int index, Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt(int index,
+            Class<E> enumClass);
 
     /**
      * Reads a long sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong( Class<E> enumClass );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong(
+            Class<E> enumClass);
 
     /**
      * Reads a long sized bit vector and converts it to an {@link EnumSet}.
-     *
+     * 
      * @see #getEnumSet(Class)
-     * @param <E>  the enum type
-     * @param index  the index from which the bytes will be read
-     * @param enumClass  the enum class used to create the EnumSet
+     * @param <E>
+     *            the enum type
+     * @param index
+     *            the index from which the bytes will be read
+     * @param enumClass
+     *            the enum class used to create the EnumSet
      * @return the EnumSet representation of the bit vector
      */
-    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong( int index, Class<E> enumClass );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as a byte sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSet( Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as a byte sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param index  the index at which the byte will be written
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSet( int index, Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as a short sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetShort( Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as a short sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param index  the index at which the bytes will be written
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetShort( int index, Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as an int sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetInt( Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as an int sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param index  the index at which the bytes will be written
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetInt( int index, Set<E> set );
-
-
-    /**
-     * Writes the specified {@link Set} to the buffer as a long sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param set  the enum set to write to the buffer
-     */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetLong( Set<E> set );
-
+    public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong(int index,
+            Class<E> enumClass);
 
     /**
-     * Writes the specified {@link Set} to the buffer as a long sized bit vector.
-     *
-     * @param <E> the enum type of the Set
-     * @param index  the index at which the bytes will be written
-     * @param set  the enum set to write to the buffer
+     * Writes the specified {@link Set} to the buffer as a byte sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSet(Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as a byte sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param index
+     *            the index at which the byte will be written
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSet(int index,
+            Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as a short sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetShort(Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as a short sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param index
+     *            the index at which the bytes will be written
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetShort(int index,
+            Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as an int sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetInt(Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as an int sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param index
+     *            the index at which the bytes will be written
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetInt(int index,
+            Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as a long sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param set
+     *            the enum set to write to the buffer
+     */
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetLong(Set<E> set);
+
+    /**
+     * Writes the specified {@link Set} to the buffer as a long sized bit
+     * vector.
+     * 
+     * @param <E>
+     *            the enum type of the Set
+     * @param index
+     *            the index at which the bytes will be written
+     * @param set
+     *            the enum set to write to the buffer
      */
-    public abstract <E extends Enum<E>> IoBuffer putEnumSetLong( int index, Set<E> set );
+    public abstract <E extends Enum<E>> IoBuffer putEnumSetLong(int index,
+            Set<E> set);
 }