The central abstractions of the NIO APIs are:
Buffers, which are containers for data;
 Charsets and their
  associated decoders and encoders, 
 which translate between
  bytes and Unicode characters; 
 Channels of
  various types, which represent connections 
 to entities capable of
  performing I/O operations; and 
 Selectors and selection keys, which together with 
  selectable channels define a multiplexed, non-blocking 
  I/O facility.  
 The java.nio package defines the buffer classes, which are used
throughout the NIO APIs.  The charset API is defined in the {@link
java.nio.charset} package, and the channel and selector APIs are defined in the
{@link java.nio.channels} package.  Each of these subpackages has its own
service-provider (SPI) subpackage, the contents of which can be used to extend
the platform's default implementations or to construct alternative
implementations.
 Buffers Description  A buffer is a container for a fixed amount of data of a specific
primitive type.  In addition to its content a buffer has a position,
which is the index of the next element to be read or written, and a
limit, which is the index of the first element that should not be read
or written.  The base {@link java.nio.Buffer} class defines these properties as
well as methods for clearing, flipping, and rewinding, for
marking the current position, and for resetting the position to
the previous mark.
  There is a buffer class for each non-boolean primitive type.  Each class
defines a family of get and put methods for moving data out of
and in to a buffer, methods for compacting, duplicating, and
slicing a buffer, and static methods for allocating a new buffer
as well as for wrapping an existing array into a buffer.
  Byte buffers are distinguished in that they can be used as the sources and
targets of I/O operations.  They also support several features not found in the
other buffer classes:
  A byte buffer can be allocated as a 
  direct buffer, in which case the Java virtual machine will make a
  best effort to perform native I/O operations directly upon it.    A byte buffer can be created by {@link
  java.nio.channels.FileChannel#map mapping  A byte buffer provides access to its content as either a heterogeneous
  or homogeneous sequence of binary data
  of any non-boolean primitive type, in either big-endian or little-endian byte order.    Unless otherwise noted, passing a null argument to a constructor
or method in any class or interface in this package will cause a {@link
java.lang.NullPointerException NullPointerException} to be thrown.
@since 1.4
@author Mark Reinhold
@author JSR-51 Expert Group
  
{@link java.nio.Buffer} 
      Position, limit, and capacity;
           
clear, flip, rewind, and mark/reset  {@link java.nio.ByteBuffer} 
      Get/put, compact, views; allocate, wrap     {@link java.nio.MappedByteBuffer}   
      A byte buffer mapped to a file   {@link java.nio.CharBuffer} 
      Get/put, compact; allocate, wrap   {@link java.nio.DoubleBuffer} 
          ' '   {@link java.nio.FloatBuffer} 
          ' '   {@link java.nio.IntBuffer} 
          ' '   {@link java.nio.LongBuffer} 
          ' '   {@link java.nio.ShortBuffer} 
          ' ' {@link java.nio.ByteOrder} 
      Typesafe enumeration for byte orders 
  
} a region of a
  file directly into memory, in which case a few additional file-related
  operations defined in the {@link java.nio.MappedByteBuffer} class are
  available.