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 | ストリーム型リスニング・ソケット用の非同期チャネルです。 |