パッケージ 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
パッケージのストリーム・クラスとこのパッケージのチャネル・クラスの相互運用をサポートする静的メソッドを定義します。 適切なチャネルは、InputStream
やOutputStream
から構築できます。反対に、InputStream
やOutputStream
は、単一のチャネルから構築できます。 Reader
は、指定された文字セットを使って指定された読込み可能なバイト・チャネルのバイトをデコードするように構築できます。反対に、Writer
は、指定された文字セットを使って文字をバイトへエンコードし、指定された書込み可能なバイト・チャネルに書き込むように構築できます。
ファイル・チャネル | 説明 |
---|---|
FileChannel |
ファイルの読み込み、書き込み、マッピング、操作 |
FileLock |
ファイルの(領域の)ロック |
MappedByteBuffer |
ファイル領域にマッピングされるダイレクトbyteバッファ |
FileChannel
クラスは、現在のファイル位置の照会および変更、ファイルの末尾の切詰めによる特定のサイズへの変更のほか、ファイルに接続されたチャネルからのバイトの読み込み、ファイルに接続されたチャネルへのバイトの書き込みといった一般的な操作をサポートします。 このクラスは、ファイル全体またはファイル内の特定の領域のロックを獲得するメソッドを定義します。こうしたメソッドは、FileLock
クラスのインスタンスを返します。 さらに、ファイルの更新内容を、このファイルが格納されている記憶装置に強制的に書き込むメソッドも定義します。こうしたメソッドにより、ファイルとその他のチャネル間のバイトのやりとりが効率化されます。また、ファイル領域を直接メモリーにマッピングできるようになります。
FileChannel
は、静的なopen
メソッドの1つを呼び出すか、またはFileInputStream
、FileOutputStream
、またはRandomAccessFile
の getChannel
メソッドを呼び出して、java.io
クラスと同じ基礎ファイルに接続されたファイル・チャネルを戻すことによって作成されます。
多重化された非ブロック入出力 | 説明 |
---|---|
SelectableChannel |
多重化可能なチャネル |
DatagramChannel |
データグラム型ソケットへのチャネル |
Pipe.SinkChannel |
パイプの書込み側 |
Pipe.SourceChannel |
パイプの読込み側 |
ServerSocketChannel |
ストリーム型リスニング・ソケットへのチャネル |
SocketChannel |
ストリーム型接続ソケットのチャネル |
Selector |
選択可能チャネルのマルチプレクサ |
SelectionKey |
セレクタへのチャネルの登録を表すトークン |
Pipe |
単方向パイプを形成する2つのチャネル |
セレクタ、選択可能チャネル、選択キーによって提供される多重化された非ブロック入出力は、スレッド指向のブロック入出力よりスケーラブルです。
セレクタは選択可能チャネルのマルチプレクサです。選択可能チャネルは、非ブロック・モードに分類できる特殊なタイプのチャネルでもあります。 多重化入出力操作を実行するには、まず選択可能チャネルを1個以上作成して、これを非ブロック・モードにして、セレクタに登録
します。 チャネルを登録すると、一連の入出力操作が指定されます。セレクタは、準備の一環としてこれらの操作をテストし、登録を表す選択キーを返します。
セレクタにチャネルを登録したら、範囲があらかじめ宣言されている1個以上の操作の実行が可能になったチャネルを検出するため、選択操作を実行できます。 チャネルの準備ができていれば、登録時に返されたキーがセレクタの選択キー・セットに追加されます。 このキー・セットと、このセットに含まれるキーを調べることにより、各チャネルが実行できる操作を判断できます。 要求された入出力操作を実行するため、各キーから対応するチャネルを取得できます。
選択キーは、そのチャネルがある操作を実行できる状態になっていることを示します。ただし、これは単なるヒントであって、スレッドがブロックされることなくある操作を実行できることを保証するわけではありません。 ヒントの内容が明らかに不正な場合は、これを無視するために、多重化入出力処理を実行するコードを書き込む必要があります。
このパッケージは、java.net
パッケージで定義されたDatagramSocket
、ServerSocket
、およびSocket
クラスに対応する選択可能なチャネル・クラスを定義します。 これらのクラスには、チャネルに関連したソケットをサポートできるように、小規模な変更が加えられています。 このパッケージは、単方向パイプを実装する単純なクラスも定義します。 新しい選択可能チャネルは常に、対応するクラスのstatic open
メソッドを呼び出すことによって作成されます。 チャネルが関連ソケットを必要としている場合は、この操作の副作用としてソケットが作成されます。
セレクタ、選択可能なチャネル、および選択キーの実装は、java.nio.channels.spi
パッケージで定義されているSelectorProvider
クラスの代替定義またはインスタンスで置き換えることができます。 ただし、この機能は、すべての開発者を対象とした機能ではありません。これは、非常に高い性能が要求される場合に、オペレーティング・システム固有の入出力多重化メカニズムを活用できるようにする、上級ユーザー向け機能です。
多重I/O抽象化を実装するために必要な簿記と同期の多くは、java.nio.channels.spi
パッケージのAbstractInterruptibleChannel
、AbstractSelectableChannel
、AbstractSelectionKey
、および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
-
インタフェースのサマリー インタフェース 説明 AsynchronousByteChannel バイトの読取りと書込みができる非同期チャネルです。AsynchronousChannel 非同期入出力操作をサポートするチャネルです。ByteChannel バイトの読み込みと書込みができるチャネルです。Channel 入出力操作に関係するチャネルです。CompletionHandler<V,A> 非同期入出力操作の結果を消費するためのハンドラです。GatheringByteChannel バッファ・シーケンスからバイトを書き込むことができるチャネルです。InterruptibleChannel 非同期のクローズや割込みが可能なチャネルです。MulticastChannel IP (Internet Protocol)マルチキャストをサポートするネットワーク・チャネルです。NetworkChannel ネットワーク・ソケットへのチャネルです。ReadableByteChannel バイトを読み取ることができるチャネルです。ScatteringByteChannel バッファ・シーケンスにバイトを読み込むことができるチャネルです。SeekableByteChannel 現在の位置を保持し、位置の変更を許可するバイト・チャネル。WritableByteChannel バイトを書き込むことができるチャネルです。 -
クラスのサマリー クラス 説明 AsynchronousChannelGroup リソースを共有するための非同期チャネルのグループ化です。AsynchronousFileChannel ファイルの読み込み、書き込み、操作用の非同期チャネルです。AsynchronousServerSocketChannel ストリーム型リスニング・ソケット用の非同期チャネルです。AsynchronousSocketChannel ストリーム型接続ソケット用の非同期チャネルです。Channels チャネルとストリームのためのユーティリティ・メソッドです。DatagramChannel データグラム型ソケットの選択可能なチャネルです。FileChannel ファイルの読み込み、書き込み、マッピング、操作用チャネルです。FileChannel.MapMode ファイル・マッピング・モード。FileLock ファイル領域上のロックを示すトークンです。MembershipKey IP (Internet Protocol)マルチキャスト・グループのメンバーシップを表すトークンです。Pipe 単方向パイプを実装する一組のチャネルです。Pipe.SinkChannel Pipe
の書込み可能な終端を表すチャネルです。Pipe.SourceChannel Pipe
の読取り可能な終端を表すチャネルです。SelectableChannel Selector
経由で多重化できるチャネルです。SelectionKey SelectableChannel
がSelector
に登録されていることを示すトークンです。Selector SelectableChannel
オブジェクトのマルチプレクサです。ServerSocketChannel ストリーム型リスニング・ソケット用の選択可能なチャネルです。SocketChannel ストリーム型接続ソケット用の選択可能チャネルです。 -
例外のサマリー Exception 説明 AcceptPendingException 以前の受け付け操作が完了していないのにチャネル上で受け付け操作を開始しようとした場合にスローされる非チェック例外です。AlreadyBoundException すでにバインド済みのネットワーク指向チャネルのソケットをバインドしようとしたときにスローされる非チェック例外です。AlreadyConnectedException すでに接続済みのSocketChannel
を接続しようとしたときにスローされる非チェック例外です。AsynchronousCloseException 別のスレッドがチャネルまたは入出力操作時にブロックされるチャネルの一部をクローズしたときにスレッドが受け取るチェック例外です。CancelledKeyException すでに無効になった選択キーを使用しようとしたときにスローされる非チェック例外です。ClosedByInterruptException スレッドがチャネルでの入出力操作でブロックされているにもかかわらず、別のスレッドから割込みを受けた場合に受信するチェック例外です。ClosedChannelException クローズしたチャネルに対する入出力操作を行おうとしたとき、または実行しようとした入出力操作に対してそのチャネルがクローズされている場合にスローされるチェック例外です。ClosedSelectorException クローズしたセレクタに対する入出力操作を呼び出そうとしたときにスローされる非チェック例外です。ConnectionPendingException 非ブロック接続操作の進行中にSocketChannel
に接続しようとしたときにスローされる非チェック例外です。FileLockInterruptionException ファイル・ロックの獲得を待機しているスレッドに対して別のスレッドから割込みがあったときに受け取られるチェック例外です。IllegalBlockingModeException ブロック・モードが不正であるのに、チャネル上でブロック・モード固有の操作を呼び出したときにスローされる非チェック例外です。IllegalChannelGroupException 同じプロバイダによって作成されなかったグループ内のチャネルを開こうとしたときにスローされる非チェック例外です。IllegalSelectorException チャネルの作成元プロバイダ以外が作成したセレクタにチャネルを登録しようとしたときにスローされる非チェック例外です。InterruptedByTimeoutException 非同期操作が完了する前にタイム・アウト時間が経過したときにスレッドが受け取るチェック例外です。NoConnectionPendingException 最初にそのconnect
メソッドを正常に呼び出すことなく、SocketChannel
のfinishConnect
メソッドが呼び出された場合にスローされる非チェック例外です。NonReadableChannelException 最初は読込みのためにオープンされていなかったチャネルから読込みを行おうとしたときにスローされる非チェック例外です。NonWritableChannelException 最初は書込みのためにオープンされていなかったチャネルに対して書込みを行おうとしたときにスローされる非チェック例外です。NotYetBoundException 未バインドのサーバー・ソケット・チャネル上で入出力操作を呼び出そうとしたときにスローされる非チェック例外です。NotYetConnectedException 未接続のソケット・チャネル上で入出力操作を呼び出そうとしたときにスローされる非チェック例外です。OverlappingFileLockException ロックを獲得しようとしたファイル領域が、すでに同じJava仮想マシンによってロックされている領域にオーバーラップしている場合、またはその他のスレッドが同じファイルのオーバーラップしている領域をロックしようと待機している場合にスローされる非チェック例外です。ReadPendingException 以前の読取りが完了していないのに非同期ソケット・チャネルから読み取ろうとした場合にスローされる非チェック例外です。ShutdownChannelGroupException シャットダウン済みのグループ内でチャネルを構築しようとしたときや、チャネル・グループが終了したために入出力操作の終了ハンドラを呼び出せないときにスローされる非チェック例外です。UnresolvedAddressException 未解決のソケット・アドレスに対してネットワーク操作を呼び出そうとしたときにスローされる非チェック例外です。UnsupportedAddressTypeException サポートされていない型のソケット・アドレスにバインドまたは接続しようとしたときにスローされる非チェック例外です。WritePendingException 以前の書込みが完了していないのに非同期ソケット・チャネルに書き込もうとした場合にスローされる非チェック例外です。