JavaTM 2 Platform
Standard Ed. 5.0

パッケージ 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 チャネルとストリームの連携のためのユーティリティメソッド

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

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

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

ScatteringByteChannel インタフェースと GatheringByteChannel インタフェースは、それぞれ ReadableByteChannel インタフェースおよび WritableByteChannel インタフェースを拡張したもので、それぞれ、単一のバッファではなく複数のバッファのシーケンスを使用する read メソッドおよび write メソッドを追加しています。

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

ファイルチャネル

説明

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

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

java.io パッケージの FileInputStream クラス、FileOutputStream クラス、および RandomAccessFile クラスに、それぞれ 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 という static メソッドを呼び出します。チャネルが関連ソケットを必要としている場合は、この操作の副作用としてソケットが作成されます。

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

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

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

JavaTM 2 Platform
Standard Ed. 5.0

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

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