モジュール java.base
パッケージ java.nio.channels

クラスAsynchronousFileChannel

java.lang.Object
java.nio.channels.AsynchronousFileChannel
すべての実装されたインタフェース:
Closeable, AutoCloseable, AsynchronousChannel, Channel

public abstract class AsynchronousFileChannel extends Object implements AsynchronousChannel
ファイルの読み込み、書き込み、操作用の非同期チャネルです。

このクラスによって定義されたopenメソッドの1つを呼び出すことでファイルを開くと、非同期ファイル・チャネルが作成されます。 ファイルには、読み込み/書き込みと現在のサイズの照会が可能な可変長のバイト・シーケンスが含まれています。 ファイルのサイズは、現在のサイズを上回るバイト数が書き込まれると大きくなり、切り捨てによって小さくなります。

非同期ファイル・チャネルには、ファイル内の現在位置がありません。 代わりに、非同期操作を開始するそれぞれの読取りメソッドと書込みメソッドに対するファイル位置が指定されます。 CompletionHandlerはパラメータとして指定され、入出力操作の結果を消費するために呼び出されます。 このクラスは、非同期操作を開始する読取りメソッドと書込みメソッドも定義し、操作の保留されている結果を表すFutureを返します。 操作が完了したかどうかを確認し、操作の完了を待機し、結果を取得するためにFutureが使用することができます。

このクラスは、読取り操作と書込み操作に加えて、次の操作を定義します。

  • ファイルの更新は、基礎となっている記憶装置にforced outされます。したがって、システムがクラッシュしてもデータの損失は回避されます。

  • ファイルの領域は、その他のプログラムからアクセスできないようにロックされます。

AsynchronousFileChannelは、入出力イベントを処理して、チャネルで入出力操作の結果を消費する終了ハンドラにディスパッチするために、タスクの送信先のスレッド・プールに関連付けられます。 チャネルで開始された入出力操作の終了ハンドラは、スレッド・プール内のいずれかのスレッドによって呼び出されることが保証されます(これによって、終了ハンドラは必ず、予期されるIDを持つスレッドによって実行されます)。 入出力操作がただちに終了し、開始スレッド自体がスレッド・プール内の1つのスレッドである場合、終了ハンドラは開始スレッドによって直接呼び出されることがあります。 スレッド・プールを指定せずにAsynchronousFileChannelが作成される場合、チャネルは、ほかのチャネルと共有される可能性がある、システムに依存するデフォルトのスレッド・プールに関連付けられます。 デフォルトのスレッド・プールは、AsynchronousChannelGroupクラスで定義されたシステム・プロパティによって構成されます。

この型のチャネルは、複数のスレッドで並行して使用できます。 closeメソッドは、Channelインタフェースの指定どおりにいつでも呼び出せます。 これによって、チャネルで未処理の非同期操作はすべて、例外AsynchronousCloseExceptionをスローして完了します。 複数の読取り操作と書込み操作が同時に未処理になることがあります。 複数の読取り操作と書込み操作が未処理のときは、入出力操作の順序、および終了ハンドラが呼び出される順序は指定されません。特に、操作が開始された順序で実行されるとはかぎりません。 読み取りまたは書込み時に使用されるByteBuffersは、複数の入出力操作で並行して使用することはできません。 さらに、入出力操作の開始後は、操作の完了後までバッファへのアクセスが行われないよう注意してください。

FileChannelと同様に、このクラスのインスタンスによって提供されるファイルのビューは、同じプログラム内のその他のインスタンスによって提供される同じファイルのほかのビューと矛盾しないことが保証されています。 しかし、基礎となるオペレーティング・システムのキャッシュ処理や、ネットワーク・ファイル・システム・プロトコルによる遅延が原因で、このクラスのインスタンスによって提供されたビューと、並行して実行されているプログラムで認識されるその他のビューが矛盾する可能性がないわけではありません。 この問題は、これらのプログラムを記述している言語の違いや、これらが同一マシンで実行されているかどうかとは関係なく発生します。 こうした矛盾は、システムによって生じるものであるため未指定です。

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