JavaTM Platform
Standard Ed. 6

パッケージ java.nio.channels

入出力操作を実行できるエンティティー (ファイル、ソケットなど) への接続を表すチャネルや、多重化された非ブロック入出力操作用のセレクタを定義します。

参照先:
          説明

インタフェースの概要
ByteChannel バイトの読み込みと書き込みができるチャネルです。
Channel 入出力操作に関係するチャネルです。
GatheringByteChannel バッファーシーケンスからバイトを書き込むことができるチャネルです。
InterruptibleChannel 非同期のクローズや割り込みが可能なチャネルです。
ReadableByteChannel バイトを読み取ることができるチャネルです。
ScatteringByteChannel バッファーシーケンスにバイトを読み込むことができるチャネルです。
WritableByteChannel バイトを書き込むことができるチャネルです。
 

クラスの概要
Channels チャネルとストリームのためのユーティリティーメソッドです。
DatagramChannel データグラム型ソケットの選択可能なチャネルです。
FileChannel ファイルの読み込み、書き込み、マッピング、操作用チャネルです。
FileChannel.MapMode ファイルマッピングモードの型保証された列挙です。
FileLock ファイル領域上のロックを示すトークンです。
Pipe 単方向パイプを実装する一組のチャネルです。
Pipe.SinkChannel Pipe の書き込み側を表すチャネルです。
Pipe.SourceChannel Pipe の読み取り側を表すチャネルです。
SelectableChannel Selector 経由で多重化できるチャネルです。
SelectionKey SelectableChannelSelector に登録されていることを示すトークンです。
Selector SelectableChannel オブジェクトのマルチプレクサです。
ServerSocketChannel ストリーム型リスニングソケット用の選択可能なチャネルです。
SocketChannel ストリーム型接続ソケット用の選択可能チャネルです。
 

例外の概要
AlreadyConnectedException すでに接続されている SocketChannel への接続を試みたときにスローされる、チェックされない例外です。
AsynchronousCloseException 別のスレッドがチャネルまたは入出力操作時にブロックされるチャネルの一部をクローズしたときにスレッドが受け取るチェック例外です。
CancelledKeyException すでに無効になった選択キーを使用しようとしたときにスローされるチェックされない例外です。
ClosedByInterruptException スレッドがチャネルでの入出力操作でブロックされているにもかかわらず、別のスレッドから割り込みを受けた場合に受信するチェック例外です。
ClosedChannelException クローズしたチャネルに対する入出力操作を行おうとしたとき、または実行しようとした入出力操作に対してそのチャネルがクローズされている場合にスローされるチェック例外です。
ClosedSelectorException クローズしたセレクタに対する入出力操作を呼び出そうとしたときにスローされるチェックされない例外です。
ConnectionPendingException 非ブロック接続操作の進行中に SocketChannel に接続しようとしたときにスローされる、チェックされない例外です。
FileLockInterruptionException ファイルロックの獲得を待機しているスレッドに対して別のスレッドから割り込みがあったときに受け取られるチェック例外です。
IllegalBlockingModeException ブロックモードが不正であるのに、チャネル上でブロックモード固有の操作を呼び出したときにスローされるチェックされない例外です。
IllegalSelectorException チャネルの作成元プロバイダ以外が作成したセレクタにチャネルを登録しようとしたときにスローされるチェックされない例外です。
NoConnectionPendingException SocketChannelconnect メソッドの呼び出しがまだ完了していないのに、 finishConnect メソッドが呼び出された場合にスローされるチェックされない例外です。
NonReadableChannelException 最初は読み込みのためにオープンされていなかったチャネルから読み込みを行おうとしたときにスローされるチェックされない例外です。
NonWritableChannelException 最初は書き込みのためにオープンされていなかったチャネルに対して書き込みを行おうとしたときにスローされるチェックされない例外です。
NotYetBoundException 未バインドのサーバソケットチャネル上で入出力操作を呼び出そうとしたときにスローされるチェックされない例外です。
NotYetConnectedException 未接続のソケットチャネル上で入出力操作を呼び出そうとしたときにスローされるチェックされない例外です。
OverlappingFileLockException ロックを獲得しようとしたファイル領域が、すでに同じ Java 仮想マシンによってロックされている領域にオーバーラップしている場合、またはその他のスレッドが同じファイルのオーバーラップしている領域をロックしようと待機している場合にスローされるチェックされない例外です。
UnresolvedAddressException 未解決のソケットアドレスに対してネットワーク操作を呼び出そうとしたときにスローされるチェックされない例外です。
UnsupportedAddressTypeException サポートされていない型のソケットアドレスにバインドまたは接続しようとしたときにスローされるチェックされない例外です。
 

パッケージ java.nio.channels の説明

入出力操作を実行できるエンティティー (ファイル、ソケットなど) への接続を表すチャネルや、多重化された非ブロック入出力操作用のセレクタを定義します。

チャネル

説明

Channel 入出力操作が行われる場所
  ReadableByteChannel バッファーへの読み込みを行う
    ScatteringByteChannel   バッファーシーケンスへの読み込みを行う
  WritableByteChannel バッファーからの書き出しを行う
    GatheringByteChannel バッファーシーケンスからの書き出しを行う
  ByteChannel バッファーへの読み込み、バッファーからの書き出しを行う
Channels チャネルとストリームの相互運用のためのユーティリティーメソッド

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

Channel インタフェースは、それぞれが新しい入出力操作を指定する複数のほかのインタフェースによって拡張されます。

ReadableByteChannel インタフェースは、チャネルからバッファーへバイトを読み込む read メソッドを指定します。同様に、WritableByteChannel インタフェースは、バッファーからチャネルへバイトを書き出す write メソッドを指定します。ByteChannel インタフェースは、これら 2 つのインタフェースを統一したインタフェースであり、バイトの読み込みと書き出しの両方を実行できる一般的なチャネルで使用されます。

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

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

ファイルチャネル

説明

FileChannel ファイルの読み込み、書き込み、マッピング、操作
FileLock ファイルの (領域の) ロック
MappedByteBuffer   ファイル領域にマッピングされるダイレクト byte バッファー

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

java.io パッケージの FileInputStream クラス、FileOutputStream クラス、RandomAccessFile クラスには、getChannel メソッドが追加されています。この 3 つのうちいずれかのクラスのインスタンス上で getChannel メソッドを呼び出すと、基本となるファイルに接続されたファイルチャネルが返されます。

多重化された非ブロック入出力

説明

SelectableChannel 多重化可能なチャネル
  DatagramChannel java.net.DatagramSocket のチャネル
  Pipe.SinkChannel パイプの書き込み側
  Pipe.SourceChannel パイプの読み込み側
  ServerSocketChannel   java.net.ServerSocket のチャネル
  SocketChannel java.net.Socket のチャネル
Selector 選択可能チャネルのマルチプレクサ
SelectionKey セレクタへのチャネルの登録を表す
トークン
Pipe 単方向パイプを形成する 2 つのチャネル

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

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

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

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

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

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

多重化入出力の抽象化オブジェクトを実装するために必要とされる登録および同期処理は、ほとんどの場合、java.nio.channels.spi パッケージの AbstractInterruptibleChannel クラス、AbstractSelectableChannel クラス、AbstractSelectionKey クラス、AbstractSelector クラスによって実行されます。カスタムセレクタプロバイダを定義する際、直接サブクラス化されるのは AbstractSelector クラスと AbstractSelectionKey クラスだけです。カスタムチャネルクラスは、このパッケージに定義されている適切な SelectableChannel サブクラスを拡張する必要があります。

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

導入されたバージョン:
1.4

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。