9 Java NIO

Java NIO (新規入力/出力) APIは、データのコンテナであるバッファと、文字セットチャネル、選択可能なチャネルなどのその他の構造を定義します。文字セットは、バイトとUnicode文字の間のマッピングです。チャネルは、入出力操作を実行できるエンティティへの接続を表します。選択可能なチャネルは、多重化が可能なチャネルです。つまり、1つのチャネルで複数の入出力操作を処理できます。

バッファ

これらは、特定のプリミティブ型のデータを一定の容量だけ格納するコンテナです。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-ASCIIUTF-8)。
CharsetDecoder バイトから文字へのデコード
CharsetEncoder 文字からバイトへのエンコード
CoderResult デコーダまたはエンコーダの結果の状態を記述します。
CodingErrorAction コーディング・エラーが検出されたときに 実行するアクションの説明

チャネル

ハードウェア・デバイス、ファイル、ネットワーク・ソケット、および1つ以上の個別の入出力操作(読込み、書込みなど)を実行できるプログラム・コンポーネントなどのエンティティへのオープン接続を表します。java.nio.channelsパッケージに関する項および表9-3を参照してください。

表9-3 チャネルのインタフェースとクラス

チャネルのインタフェースまたはクラス 説明
Channel チャネルのベース・インタフェースおよびインタフェースとクラスです。
ReadableByteChannel バイトを読み取ることができるチャネルです。
ScatteringByteChannel バッファ・シーケンスにバイトを読み込むことができるチャネルです。分散読込み操作は、1回の呼出しで、指定されたバッファ・シーケンス(複数可)に単一のバイト・シーケンスを読み込みます。
WritableByteChannel バイトを書き込むことができるチャネルです。
GatheringByteChannel バッファ・シーケンスからバイトを書き込むことができるチャネルです。この「収集」書込み操作では、1回の呼出しで、指定した1つ以上のバッファ・シーケンスから連続する複数のバイト(バイト・シーケンス)を書き込むことができます。
ByteChannel バイトの読み込みと書込みができるチャネルです。ReadableByteChannelWritableByteChannelを統合します。
SeekableByteChannel 現在の位置を保持し、位置の変更を許可するバイト・チャネル。シーク可能なバイト・チャネルは、読み取りおよび書込みが可能な可変長のバイト・シーケンスが含まれているエンティティ(通常はファイル)に接続されます。
AsynchronousChannel 非同期入出力操作をサポートするチャネルです。
AsynchronousByteChannel バイトの読取りと書込みができる非同期チャネルです。
NetworkChannel ネットワーク・ソケットへのチャネルです。
MulticastChannel IP (Internet Protocol)マルチキャストをサポートするネットワーク・チャネルです。IPマルチキャストとは、単一の宛先アドレスで識別されたゼロ以上のホストであるグループのメンバーにIPデータグラムを転送することです。
FileChannel ファイルの読み込み、書き込み、マッピング、操作用チャネルです。ファイルに接続されているSeekableByteChannelです。
SelectableChannel

Selector経由で多重化できるチャネルです。

多重化とは、1つのチャネルで複数の入出力操作を処理する機能です。選択可能チャネルは、ブロック・モードまたは非ブロック・モードに設定できます。ブロック・モードの場合、チャネル上で呼び出された入出力操作は、前の操作が完了するまでブロックされます。非ブロック・モードの場合、入出力操作はブロックされず、要求されたバイト数より少ないバイト数が転送されます。バイトが一切転送されない場合もあります。

DatagramChannel

UDP (ユーザー・データグラム・プロトコル)パケットを送受信できる選択可能なチャネルです。

異なるプロトコル・ファミリを使用してデータグラム・チャネルを作成できます:

  • INETまたはINET6プロトコル・ファミリを使用して、インターネット・プロトコル・ソケットのチャネルを作成します。これらのチャネルは、TCLおよびUDPを使用したネットワーク通信をサポートします。これらのアドレスのタイプは、IPアドレスとポート番号をカプセル化するInetSocketAddressです。
  • UNIXプロトコル・ファミリを使用してUNIXドメイン・ソケットのチャネルを作成します。これらのソケットは、同じホスト上のローカル・プロセス間通信をサポートします。これらのアドレスのタイプは、ローカル・システム上のファイル・システム・パス名をカプセル化するUnixDomainSocketAddressです。
Pipe.SinkChannel パイプの書込み可能な終端を表すチャネルです。パイプはチャネルのペア(書込み可能なシンク・チャネルと読取り可能なソース・チャネル)です。
Pipe.SourceChannel パイプの読取り可能な終端を表すチャネルです。
ServerSocketChannel

ストリーム型リスニング・ソケット用の選択可能なチャネルです。

データグラム・チャネルと同様に、インターネット・プロトコル・ソケットまたはUNIXドメイン・ソケット用のサーバー・ソケット・チャネルを作成できます。

SocketChannel

ストリーム型接続ソケット用の選択可能チャネルです。

データグラム・チャネルと同様に、インターネット・プロトコル・ソケットまたはUNIXドメイン・ソケット用のソケット・チャネルを作成できます。

AsynchronousFileChannel ファイルの読み込み、書き込み、操作用の非同期チャネルです。
AsynchronousSocketChannel ストリーム型接続ソケット用の非同期チャネルです。
AsynchronousServerSocketChannel ストリーム型リスニング・ソケット用の非同期チャネルです。