ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8
compact3

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

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

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

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

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

説明

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

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

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

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

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

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

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

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

非同期入出力説明
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
ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.