モジュール java.base

パッケージ java.nio.channels


パッケージjava.nio.channels
入出力操作を実行できるエンティティ(ファイル、ソケットなど)への接続を表すチャネルや、多重化された非ブロック入出力操作用のセレクタを定義します。
チャネルおよびその説明のリスト
チャネル 説明
Channel 入出力操作が行われる場所
ReadableByteChannel バッファへの読込みを行う
ScatteringByteChannel バッファ・シーケンスへの読込みを行う
WritableByteChannel バッファからの書出しを行う
GatheringByteChannel バッファ・シーケンスからの書込みを行う
ByteChannel バッファへの読み込み、バッファからの書込みを行う
SeekableByteChannel 可変長のバイト・シーケンスが含まれているエンティティに接続されたByteChannel
AsynchronousChannel 非同期入出力操作をサポートする。
AsynchronousByteChannel 非同期でバイトの読取りと書込みを行う
NetworkChannel ネットワーク・ソケットへのチャネル
MulticastChannel IP (Internet Protocol)マルチキャスト・グループに参加できる
Channels チャネルとストリームの相互運用のためのユーティリティ・メソッド

チャネルは、ハードウェア・デバイス、ファイル、ネットワーク・ソケットのほか、1つ以上の個別の入出力操作(読み込み、書き込みなど)を実行できるプログラム・コンポーネントなどのエンティティへのオープン接続を表します。 Channelインタフェースに指定されているとおり、チャネルの状態はオープンかクローズのどちらかです。どちらの状態のチャネルも、非同期クローズ可能かつ割込み可能です。

Channelインタフェースは、いくつかのほかのインタフェースによって拡張されます。

ReadableByteChannelインタフェースは、チャネルからバッファにバイトを読み取るreadメソッドを指定します。同様に、WritableByteChannelインタフェースは、バッファからチャネルにバイトを書き込むwriteメソッドを指定します。 ByteChannelインタフェースは、これら2つのインタフェースを統一したインタフェースであり、バイトの読み込みと書出しの両方を実行できる一般的なチャネルで使用されます。 SeekableByteChannelインタフェースは、チャネルの現在の位置とそのサイズ照会および変更するメソッドでByteChannelインタフェースを継承したものです。

シングル・バッファではなく複数のバッファのシーケンスを使用するreadメソッドとwriteメソッドを追加することにより、ScatteringByteChannelインタフェースはReadableByteChannelインタフェース、GatheringByteChannelインタフェースはWritableByteChannelインタフェースを継承します。

NetworkChannelインタフェースは、チャネルのソケットをバインドして、ソケットのバインド先のアドレスを取得するためのメソッドを指定し、ソケット・オプションを取得して設定するためのメソッドを指定します。 MulticastChannelインタフェースは、IP (Internet Protocol)マルチキャスト・グループに参加するためのメソッドを指定します。

Channelsユーティリティ・クラスは、java.ioパッケージのストリーム・クラスとこのパッケージのチャネル・クラスの相互運用をサポートする静的メソッドを定義します。 適切なチャネルは、InputStreamOutputStreamから構築できます。反対に、InputStreamOutputStreamは、単一のチャネルから構築できます。 Readerは、指定された文字セットを使って指定された読込み可能なバイト・チャネルのバイトをデコードするように構築できます。反対に、Writerは、指定された文字セットを使って文字をバイトへエンコードし、指定された書込み可能なバイト・チャネルに書き込むように構築できます。

ファイル・チャネルおよびその説明のリスト
ファイル・チャネル 説明
FileChannel ファイルの読み込み、書き込み、マッピング、操作
FileLock ファイルの(領域の)ロック
MappedByteBuffer ファイル領域にマッピングされるダイレクトbyteバッファ

FileChannelクラスは、現在のファイル位置の照会および変更、ファイルの末尾の切詰めによる特定のサイズへの変更のほか、ファイルに接続されたチャネルからのバイトの読み込み、ファイルに接続されたチャネルへのバイトの書き込みといった一般的な操作をサポートします。 このクラスは、ファイル全体またはファイル内の特定の領域のロックを獲得するメソッドを定義します。こうしたメソッドは、FileLockクラスのインスタンスを返します。 さらに、ファイルの更新内容を、このファイルが格納されている記憶装置に強制的に書き込むメソッドも定義します。こうしたメソッドにより、ファイルとその他のチャネル間のバイトのやりとりが効率化されます。また、ファイル領域を直接メモリーにマッピングできるようになります。

FileChannelは、静的なopenメソッドの1つを呼び出すか、またはFileInputStreamFileOutputStream、またはRandomAccessFile getChannelメソッドを呼び出して、java.ioクラスと同じ基礎ファイルに接続されたファイル・チャネルを戻すことによって作成されます。

多重化された非ブロック・チャネルおよびその説明のリスト
多重化された非ブロック入出力 説明
SelectableChannel 多重化可能なチャネル
DatagramChannel データグラム型ソケットへのチャネル
Pipe.SinkChannel パイプの書込み側
Pipe.SourceChannel パイプの読込み側
ServerSocketChannel ストリーム型リスニング・ソケットへのチャネル
SocketChannel ストリーム型接続ソケットのチャネル
Selector 選択可能チャネルのマルチプレクサ
SelectionKey セレクタへのチャネルの登録を表すトークン  
Pipe 単方向パイプを形成する2つのチャネル

セレクタ選択可能チャネル選択キーによって提供される多重化された非ブロック入出力は、スレッド指向のブロック入出力よりスケーラブルです。

セレクタ選択可能チャネルのマルチプレクサです。選択可能チャネルは、非ブロック・モードに分類できる特殊なタイプのチャネルでもあります。 多重化入出力操作を実行するには、まず選択可能チャネルを1個以上作成して、これを非ブロック・モードにして、セレクタに登録します。 チャネルを登録すると、一連の入出力操作が指定されます。セレクタは、準備の一環としてこれらの操作をテストし、登録を表す選択キーを返します。

セレクタにチャネルを登録したら、範囲があらかじめ宣言されている1個以上の操作の実行が可能になったチャネルを検出するため、選択操作を実行できます。 チャネルの準備ができていれば、登録時に返されたキーがセレクタの選択キー・セットに追加されます。 このキー・セットと、このセットに含まれるキーを調べることにより、各チャネルが実行できる操作を判断できます。 要求された入出力操作を実行するため、各キーから対応するチャネルを取得できます。

選択キーは、そのチャネルがある操作を実行できる状態になっていることを示します。ただし、これは単なるヒントであって、スレッドがブロックされることなくある操作を実行できることを保証するわけではありません。 ヒントの内容が明らかに不正な場合は、これを無視するために、多重化入出力処理を実行するコードを書き込む必要があります。

このパッケージは、java.netパッケージで定義されたDatagramSocketServerSocket、およびSocketクラスに対応する選択可能なチャネル・クラスを定義します。 これらのクラスには、チャネルに関連したソケットをサポートできるように、小規模な変更が加えられています。 このパッケージは、単方向パイプを実装する単純なクラスも定義します。 新しい選択可能チャネルは常に、対応するクラスのstatic openメソッドを呼び出すことによって作成されます。 チャネルが関連ソケットを必要としている場合は、この操作の副作用としてソケットが作成されます。

DatagramChannelSocketChannelおよびServerSocketChannelは、異なるprotocol familiesで作成できます。 標準ファミリ・タイプは、StandardProtocolFamilyで指定されます。

「インターネット・プロトコル」ソケットのチャネルは、INETまたはINET6プロトコル・ファミリを使用して作成されます。 「インターネット・プロトコル」ソケットは、TCPおよびUDPを使用したネットワーク通信をサポートし、IPアドレスとポート番号をカプセル化するInetSocketAddressを使用してアドレス指定されます。 「インターネット・プロトコル」ソケットは、チャネル・ファクトリの作成メソッドでプロトコル・ファミリが指定されていない場合に作成されるデフォルトのタイプでもあります。

「Unixドメイン」ソケットのチャネルは、UNIXプロトコル・ファミリを使用して作成されます。 「Unixドメイン」ソケットは、同じホスト上のローカル・プロセス間通信をサポートし、ローカル・システム上のファイルシステム・パス名をカプセル化するUnixDomainSocketAddressを使用してアドレス指定されます。

セレクタ、選択可能なチャネル、および選択キーの実装は、java.nio.channels.spiパッケージで定義されているSelectorProviderクラスの代替定義またはインスタンスで置き換えることができます。 ただし、この機能は、すべての開発者を対象とした機能ではありません。これは、非常に高い性能が要求される場合に、オペレーティング・システム固有の入出力多重化メカニズムを活用できるようにする、上級ユーザー向け機能です。

多重I/O抽象化を実装するために必要な簿記と同期の多くは、java.nio.channels.spiパッケージのAbstractInterruptibleChannelAbstractSelectableChannelAbstractSelectionKey、およびAbstractSelectorクラスによって実行されます。 カスタム・セレクタ・プロバイダを定義する際、直接サブクラス化されるのはAbstractSelectorクラスとAbstractSelectionKeyクラスだけです。カスタムチャネルクラスは、このパッケージに定義されている適切なSelectableChannelサブクラスを拡張する必要があります。

非同期チャネルおよびその説明のリスト
非同期I/O 説明
AsynchronousFileChannel ファイルの読み込み、書き込み、操作用の非同期チャネルです
AsynchronousSocketChannel ストリーム型接続ソケットへの非同期チャネルです
AsynchronousServerSocketChannel ストリーム型リスニング・ソケットへの非同期チャネルです
CompletionHandler 非同期操作の結果を消費するためのハンドラ
AsynchronousChannelGroup リソースを共有するための非同期チャネルのグループ化

Asynchronous channelsは、非同期入出力操作が可能な特殊なタイプのチャネルです。 非同期チャネルは非ブロックであり、非同期操作を開始するためのメソッドを定義して、それぞれの操作の保留にされている結果を表すFutureを返します。 Futureを使用して、操作の結果をポーリングするか待機することができます。 非同期入出力操作は、操作の完了時に呼び出すCompletionHandlerを指定することもできます。 終了ハンドラは、入出力操作の結果を消費するために実行されるユーザー指定のコードです。

このパッケージは、ストリーム型接続またはリスニング・ソケット、またはデータグラム型ソケットに接続されている非同期チャネル・クラスを定義します。 これは、ファイルの非同期読み取り、書き込み、および操作のためのAsynchronousFileChannelクラスも定義します。 FileChannelと同様に、ファイルの末尾の切詰めによって特定のサイズに変更する、ファイルの更新内容をストレージ・デバイスに強制的に書き込む、またはファイル全体またはファイル内の特定の領域のロックを取得する操作をサポートします。 FileChannelとは異なり、ファイル・ディレクトリの領域をメモリーにマッピングするためのメソッドは定義しません。 メモリーにマッピングされた入出力が必要な場合は、FileChannelを使用できます。

非同期チャネルは、リソース共有のために非同期チャネル・グループにバインドされます。 グループには、グループ内のチャネルで実行される非同期操作の結果を消費する入出力イベントを処理して、終了ハンドラにディスパッチするために、タスクの送信先の関連するExecutorServiceがあります。 チャネルの作成時にオプションでグループを指定したり、チャネルをデフォルト・グループにバインドしたりすることができます。 上級ユーザーは、独自の非同期チャネル・グループを作成するか、デフォルト・グループに使用するExecutorServiceを構成できます。

セレクタの場合と同様に、非同期チャネルの実装は、java.nio.channels.spiパッケージで定義されているAsynchronousChannelProviderクラスの代替定義またはインスタンス"差し込む"で置き換えることができます。 ただし、この機能は、すべての開発者を対象とした機能ではありません。これは、非常に高い性能が要求されるときに、オペレーティング・システム固有の非同期入出力メカニズムを活用できるようにする、上級ユーザー向け機能です。

ほかで指定がない場合、null引数をこのパッケージの任意のクラスまたはインタフェースのメソッドまたはコンストラクタへ渡すと、NullPointerExceptionがスローされます。

導入されたバージョン:
1.4
  • インタフェースのサマリー
    インタフェース
    説明
    バイトの読取りと書込みができる非同期チャネルです。
    非同期入出力操作をサポートするチャネルです。
    バイトの読み込みと書込みができるチャネルです。
    入出力操作に関係するチャネルです。
    非同期入出力操作の結果を消費するためのハンドラです。
    バッファ・シーケンスからバイトを書き込むことができるチャネルです。
    非同期のクローズや割込みが可能なチャネルです。
    IP (Internet Protocol)マルチキャストをサポートするネットワーク・チャネルです。
    ネットワーク・ソケットへのチャネルです。
    バイトを読み取ることができるチャネルです。
    バッファ・シーケンスにバイトを読み込むことができるチャネルです。
    現在の位置を保持し、位置の変更を許可するバイト・チャネル。
    バイトを書き込むことができるチャネルです。
  • クラスのサマリー
    クラス
    説明
    リソースを共有するための非同期チャネルのグループ化です。
    ファイルの読み込み、書き込み、操作用の非同期チャネルです。
    ストリーム型リスニング・ソケット用の非同期チャネルです。
    ストリーム型接続ソケット用の非同期チャネルです。
    チャネルとストリームのためのユーティリティ・メソッドです。
    データグラム型ソケットの選択可能なチャネルです。
    ファイルの読み込み、書き込み、マッピング、操作用チャネルです。
    ファイル・マッピング・モード。
    ファイル領域上のロックを示すトークンです。
    IP (Internet Protocol)マルチキャスト・グループのメンバーシップを表すトークンです。
    単方向パイプを実装する一組のチャネルです。
    Pipeの書込み可能な終端を表すチャネルです。
    Pipeの読取り可能な終端を表すチャネルです。
    Selector経由で多重化できるチャネルです。
    SelectableChannelSelectorに登録されていることを示すトークンです。
    SelectableChannelオブジェクトのマルチプレクサです。
    ストリーム型リスニング・ソケット用の選択可能なチャネルです。
    ストリーム型接続ソケット用の選択可能チャネルです。
  • 例外のサマリー
    Exception
    説明
    以前の受け付け操作が完了していないのにチャネル上で受け付け操作を開始しようとした場合にスローされる非チェック例外です。
    すでにバインド済みのネットワーク指向チャネルのソケットをバインドしようとしたときにスローされる非チェック例外です。
    すでに接続済みのSocketChannelを接続しようとしたときにスローされる非チェック例外です。
    別のスレッドがチャネルまたは入出力操作時にブロックされるチャネルの一部をクローズしたときにスレッドが受け取るチェック例外です。
    すでに無効になった選択キーを使用しようとしたときにスローされる非チェック例外です。
    スレッドがチャネルでの入出力操作でブロックされているにもかかわらず、別のスレッドから割込みを受けた場合に受信するチェック例外です。
    クローズしたチャネルに対する入出力操作を行おうとしたとき、または実行しようとした入出力操作に対してそのチャネルがクローズされている場合にスローされるチェック例外です。
    クローズしたセレクタに対する入出力操作を呼び出そうとしたときにスローされる非チェック例外です。
    非ブロック接続操作の進行中にSocketChannelに接続しようとしたときにスローされる非チェック例外です。
    ファイル・ロックの獲得を待機しているスレッドに対して別のスレッドから割込みがあったときに受け取られるチェック例外です。
    ブロック・モードが不正であるのに、チャネル上でブロック・モード固有の操作を呼び出したときにスローされる非チェック例外です。
    同じプロバイダによって作成されなかったグループ内のチャネルを開こうとしたときにスローされる非チェック例外です。
    チャネルの作成元プロバイダ以外が作成したセレクタにチャネルを登録しようとしたときにスローされる非チェック例外です。
    非同期操作が完了する前にタイム・アウト時間が経過したときにスレッドが受け取るチェック例外です。
    最初にそのconnectメソッドを正常に呼び出すことなく、SocketChannelfinishConnectメソッドが呼び出された場合にスローされる非チェック例外です。
    最初は読込みのためにオープンされていなかったチャネルから読込みを行おうとしたときにスローされる非チェック例外です。
    最初は書込みのためにオープンされていなかったチャネルに対して書込みを行おうとしたときにスローされる非チェック例外です。
    未バインドのサーバー・ソケット・チャネル上で入出力操作を呼び出そうとしたときにスローされる非チェック例外です。
    未接続のソケット・チャネル上で入出力操作を呼び出そうとしたときにスローされる非チェック例外です。
    ロックを獲得しようとしたファイル領域が、すでに同じJava仮想マシンによってロックされている領域にオーバーラップしている場合、またはその他のスレッドが同じファイルのオーバーラップしている領域をロックしようと待機している場合にスローされる非チェック例外です。
    以前の読取りが完了していないのに非同期ソケット・チャネルから読み取ろうとした場合にスローされる非チェック例外です。
    シャットダウン済みのグループ内でチャネルを構築しようとしたときや、チャネル・グループが終了したために入出力操作の終了ハンドラを呼び出せないときにスローされる非チェック例外です。
    未解決のソケット・アドレスに対してネットワーク操作を呼び出そうとしたときにスローされる非チェック例外です。
    サポートされていない型のソケット・アドレスにバインドまたは接続しようとしたときにスローされる非チェック例外です。
    以前の書込みが完了していないのに非同期ソケット・チャネルに書き込もうとした場合にスローされる非チェック例外です。