Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

# java.nio

Defines buffers, which are containers for data, and provides an overview of the other NIO packages.

The central abstractions of the NIO APIs are:

- [*Buffers*](https://developer.android.com/reference/java/nio/package-summary#buffers), which are containers for data;

- [*Charsets*](https://developer.android.com/reference/java/nio/charset/package-summary) and their associated *decoders* and *encoders*,   

  which translate between bytes and Unicode characters;

- [*Channels*](https://developer.android.com/reference/java/nio/channels/package-summary) 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](https://developer.android.com/reference/java/nio/channels/package-summary#multiplex) facility.

The `java.nio` package defines the buffer classes, which are used throughout the NIO APIs. The charset API is defined in the `https://developer.android.com/reference/java/nio/charset/package-summary` package, and the channel and selector APIs are defined in the `https://developer.android.com/reference/java/nio/channels/package-summary` 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 |
| `https://developer.android.com/reference/java/nio/Buffer` | Position, limit, and capacity; clear, flip, rewind, and mark/reset |
| `https://developer.android.com/reference/java/nio/ByteBuffer` | Get/put, compact, views; allocate, wrap |
| `https://developer.android.com/reference/java/nio/MappedByteBuffer` | A byte buffer mapped to a file |
| `https://developer.android.com/reference/java/nio/CharBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/DoubleBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/FloatBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/IntBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/LongBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/ShortBuffer` | Get/put, compact; allocate, wrap |
| `https://developer.android.com/reference/java/nio/ByteOrder` | Typesafe enumeration for byte orders |
|---|---|
[Description of the various buffers]

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 `https://developer.android.com/reference/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*](https://developer.android.com/reference/java/nio/ByteBuffer#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 `https://developer.android.com/reference/java/nio/channels/FileChannel#map(java.nio.channels.FileChannel.MapMode,%20long,%20long)` a region of a file directly into memory, in which case a few additional file-related operations defined in the `https://developer.android.com/reference/java/nio/MappedByteBuffer` class are available.

- A byte buffer provides access to its content as either a heterogeneous or homogeneous sequence of [*binary data*](https://developer.android.com/reference/java/nio/ByteBuffer#bin) of any non-boolean primitive type, in either big-endian or little-endian [byte order](https://developer.android.com/reference/java/nio/ByteOrder).

Unless otherwise noted, passing a `null` argument to a constructor or method in any class or interface in this package will cause a `https://developer.android.com/reference/java/lang/NullPointerException` to be thrown.

## Classes

|---|---|
| [Buffer](https://developer.android.com/reference/java/nio/Buffer) | A container for data of a specific primitive type. |
| [ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer) | A byte buffer. |
| [ByteOrder](https://developer.android.com/reference/java/nio/ByteOrder) | A typesafe enumeration for byte orders. |
| [CharBuffer](https://developer.android.com/reference/java/nio/CharBuffer) | A char buffer. |
| [DoubleBuffer](https://developer.android.com/reference/java/nio/DoubleBuffer) | A double buffer. |
| [FloatBuffer](https://developer.android.com/reference/java/nio/FloatBuffer) | A float buffer. |
| [IntBuffer](https://developer.android.com/reference/java/nio/IntBuffer) | An int buffer. |
| [LongBuffer](https://developer.android.com/reference/java/nio/LongBuffer) | A long buffer. |
| [MappedByteBuffer](https://developer.android.com/reference/java/nio/MappedByteBuffer) | A direct byte buffer whose content is a memory-mapped region of a file. |
| [ShortBuffer](https://developer.android.com/reference/java/nio/ShortBuffer) | A short buffer. |

## Exceptions

|---|---|
| [BufferOverflowException](https://developer.android.com/reference/java/nio/BufferOverflowException) | Unchecked exception thrown when a relative *put* operation reaches the target buffer's limit. |
| [BufferUnderflowException](https://developer.android.com/reference/java/nio/BufferUnderflowException) | Unchecked exception thrown when a relative *get* operation reaches the source buffer's limit. |
| [InvalidMarkException](https://developer.android.com/reference/java/nio/InvalidMarkException) | Unchecked exception thrown when an attempt is made to reset a buffer when its mark is not defined. |
| [ReadOnlyBufferException](https://developer.android.com/reference/java/nio/ReadOnlyBufferException) | Unchecked exception thrown when a content-mutation method such as put or compact is invoked upon a read-only buffer. |

-

  ## Classes

  - [Buffer](https://developer.android.com/reference/java/nio/Buffer)
  - [ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer)
  - [ByteOrder](https://developer.android.com/reference/java/nio/ByteOrder)
  - [CharBuffer](https://developer.android.com/reference/java/nio/CharBuffer)
  - [DoubleBuffer](https://developer.android.com/reference/java/nio/DoubleBuffer)
  - [FloatBuffer](https://developer.android.com/reference/java/nio/FloatBuffer)
  - [IntBuffer](https://developer.android.com/reference/java/nio/IntBuffer)
  - [LongBuffer](https://developer.android.com/reference/java/nio/LongBuffer)
  - [MappedByteBuffer](https://developer.android.com/reference/java/nio/MappedByteBuffer)
  - [ShortBuffer](https://developer.android.com/reference/java/nio/ShortBuffer)
-

  ## Exceptions

  - [BufferOverflowException](https://developer.android.com/reference/java/nio/BufferOverflowException)
  - [BufferUnderflowException](https://developer.android.com/reference/java/nio/BufferUnderflowException)
  - [InvalidMarkException](https://developer.android.com/reference/java/nio/InvalidMarkException)
  - [ReadOnlyBufferException](https://developer.android.com/reference/java/nio/ReadOnlyBufferException)