9 Java NIO
Java NIO (新規入力/出力) APIは、データのコンテナであるバッファと、文字セット、チャネル、選択可能なチャネルなどのその他の構造を定義します。文字セットは、バイトとUnicode文字の間のマッピングです。チャネルは、入出力操作を実行できるエンティティへの接続を表します。選択可能なチャネルは、多重化が可能なチャネルです。つまり、1つのチャネルで複数の入出力操作を処理できます。
Java NIOの例
次のコード例では、Java NIO APIを示します:
バッファ
これらは、特定のプリミティブ型のデータを一定の容量だけ格納するコンテナです。java.nioパッケージに関する項および表9-1を参照してください。
表9-1 バッファ・クラス
| バッファ・クラス | 説明 | 
|---|---|
| Buffer | バッファ・クラスのベース・クラスです。 | 
| ByteBuffer | バイトのバッファです。 | 
| MappedByteBuffer | ファイルにマップされているバイトのバッファです。 | 
| CharBuffer | charデータ型のバッファです。 | 
| DoubleBuffer | doubleデータ型のバッファです。 | 
| FloatBuffer | floatデータ型のバッファです。 | 
| IntBuffer | intデータ型のバッファです。 | 
| LongBuffer | longデータ型のバッファです。 | 
| ShortBuffer | shortデータ型のバッファです。 | 
文字セット
16ビットUnicode文字のシーケンスとバイトのシーケンス間の名前付きマッピングです。文字セットのサポートには、バイトとUnicode文字間で変換するデコーダおよびエンコーダが含まれます。java.nio.charsetパッケージに関する項および表9-2を参照してください。
表9-2 文字セット・クラス
| 文字セット・クラス | 説明 | 
|---|---|
| Charset | 文字とバイト間の名前付きマッピング(たとえば、 US-ASCIIとUTF-8)。 | 
| CharsetDecoder | バイトから文字へのデコード | 
| CharsetEncoder | 文字からバイトへのエンコード | 
| CoderResult | デコーダまたはエンコーダの結果の状態を記述します。 | 
| CodingErrorAction | コーディング・エラーが検出されたときに 実行するアクションの説明 | 
チャネル
ハードウェア・デバイス、ファイル、ネットワーク・ソケット、および1つ以上の個別の入出力操作(読込み、書込みなど)を実行できるプログラム・コンポーネントなどのエンティティへのオープン接続を表します。java.nio.channelsパッケージに関する項および表9-3を参照してください。
表9-3 チャネルのインタフェースとクラス
| チャネルのインタフェースまたはクラス | 説明 | 
|---|---|
| Channel | チャネルのベース・インタフェースおよびインタフェースとクラスです。 | 
| ReadableByteChannel | バイトを読み取ることができるチャネルです。 | 
| ScatteringByteChannel | バッファ・シーケンスにバイトを読み込むことができるチャネルです。分散読込み操作は、1回の呼出しで、指定されたバッファ・シーケンス(複数可)に単一のバイト・シーケンスを読み込みます。 | 
| WritableByteChannel | バイトを書き込むことができるチャネルです。 | 
| GatheringByteChannel | バッファ・シーケンスからバイトを書き込むことができるチャネルです。この「収集」書込み操作では、1回の呼出しで、指定した1つ以上のバッファ・シーケンスから連続する複数のバイト(バイト・シーケンス)を書き込むことができます。 | 
| ByteChannel | バイトの読み込みと書込みができるチャネルです。ReadableByteChannelとWritableByteChannelを統合します。 | 
| SeekableByteChannel | 現在の位置を保持し、位置の変更を許可するバイト・チャネル。シーク可能なバイト・チャネルは、読み取りおよび書込みが可能な可変長のバイト・シーケンスが含まれているエンティティ(通常はファイル)に接続されます。 | 
| AsynchronousChannel | 非同期入出力操作をサポートするチャネルです。 | 
| AsynchronousByteChannel | バイトの読取りと書込みができる非同期チャネルです。 | 
| NetworkChannel | ネットワーク・ソケットへのチャネルです。 | 
| MulticastChannel | IP (Internet Protocol)マルチキャストをサポートするネットワーク・チャネルです。IPマルチキャストとは、単一の宛先アドレスで識別されたゼロ以上のホストであるグループのメンバーにIPデータグラムを転送することです。 | 
| FileChannel | ファイルの読み込み、書き込み、マッピング、操作用チャネルです。ファイルに接続されているSeekableByteChannelです。 | 
| SelectableChannel | Selector経由で多重化できるチャネルです。 多重化とは、1つのチャネルで複数の入出力操作を処理する機能です。選択可能チャネルは、ブロック・モードまたは非ブロック・モードに設定できます。ブロック・モードの場合、チャネル上で呼び出された入出力操作は、前の操作が完了するまでブロックされます。非ブロック・モードの場合、入出力操作はブロックされず、要求されたバイト数より少ないバイト数が転送されます。バイトが一切転送されない場合もあります。 | 
| DatagramChannel | UDP (ユーザー・データグラム・プロトコル)パケットを送受信できる選択可能なチャネルです。 異なるプロトコル・ファミリを使用してデータグラム・チャネルを作成できます: 
 | 
| Pipe.SinkChannel | パイプの書込み可能な終端を表すチャネルです。パイプはチャネルのペア(書込み可能なシンク・チャネルと読取り可能なソース・チャネル)です。 | 
| Pipe.SourceChannel | パイプの読取り可能な終端を表すチャネルです。 | 
| ServerSocketChannel | ストリーム型リスニング・ソケット用の選択可能なチャネルです。 データグラム・チャネルと同様に、インターネット・プロトコル・ソケットまたはUNIXドメイン・ソケット用のサーバー・ソケット・チャネルを作成できます。 | 
| SocketChannel | ストリーム型接続ソケット用の選択可能チャネルです。 データグラム・チャネルと同様に、インターネット・プロトコル・ソケットまたはUNIXドメイン・ソケット用のソケット・チャネルを作成できます。 | 
| AsynchronousFileChannel | ファイルの読み込み、書き込み、操作用の非同期チャネルです。 | 
| AsynchronousSocketChannel | ストリーム型接続ソケット用の非同期チャネルです。 | 
| AsynchronousServerSocketChannel | ストリーム型リスニング・ソケット用の非同期チャネルです。 |