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

クラスFileChannel

java.lang.Object
すべての実装されたインタフェース:
Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, ReadableByteChannel, ScatteringByteChannel, SeekableByteChannel, WritableByteChannel

ファイルの読み込み、書き込み、マッピング、操作用チャネルです。

ファイル・チャネルは、ファイルに接続されるSeekableByteChannelです。 これは、ファイル内に、照会および変更が可能な現在の位置を持っています。 ファイル自体には、読み込み/書き込みと現在のサイズの照会が可能な可変長のバイト・シーケンスが含まれています。 ファイルのサイズは、現在のサイズを上回るバイト数が書き込まれると大きくなり、切り詰めによって小さくなります。 ファイルには、アクセス許可、コンテンツ・タイプ、最終更新時間などのメタデータも関連付けられています。このクラスは、メタデータ・アクセスのためのメソッドを定義しません。

このクラスは、バイト・チャネルに対する一般的な操作(読み込み、書き込み、クローズ)のほかに、次のようなファイル固有の操作を定義します。

  • バイトの読み取りまたは書き込みは、チャネルの現在位置に影響を及ぼすことなく、ファイル内の絶対位置で行われる。

  • ファイルのリージョンは、メモリーに直接mappedになる場合があります。大規模ファイルの場合は、通常のreadまたはwriteメソッドを呼び出すよりもはるかに効率的です。

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

  • バイトはファイルからほかのチャネルへ転送できる。反対に、ほかのチャネルから転送することもできる。多くのオペレーティング・システムでは、ファイル・システムのキャッシュとの間で非常に高速で直接転送することにより、この転送を最適化できる。

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

ファイル・チャネルは、複数の並行スレッドで安全に使用できます。 closeメソッドは、Channelインタフェースの指定どおりにいつでも呼び出せます。 チャネルの位置を使用する操作、またはファイル・サイズを変更する可能性がある操作は、1つずつ実行することになっています。前の操作の進行中に同じような操作を新しく開始しようとすると、最初の操作が終わるまで新しい操作はブロックされます。 その他の操作、とりわけ明示的な位置を使用する操作は、前の操作と同時並行で実行できます。同時並行処理が行われるかどうかは基礎となる実装によって決まるため、未指定です。

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

ファイル・チャネルは、このクラスによって定義されるopenメソッドの1つを呼び出すことによって作成されます。 ファイル・チャネルは、既存のFileInputStreamFileOutputStreamまたはRandomAccessFileオブジェクトからも取得できます。そのオブジェクトのgetChannelメソッドを呼び出すと、同じ基礎となるファイルに接続されているファイル・チャネルが返されます。 ファイル・チャネルが既存のストリームまたはランダム・アクセス・ファイルから取得される場合、ファイル・チャネルの状態は、getChannelメソッドがチャネルを返したオブジェクトの状態と直結的に接続されます。 たとえば、チャネルの位置を明示的に、あるいはバイトの読込みや書込みによって変更すると、発生元のオブジェクトのファイル位置が変わります(逆も同様)。 ファイル・チャネルからファイルの長さを変更すると、発生元オブジェクトから見たときの長さが変わります(逆も同様)。 バイトの書込みによってファイルのコンテンツを変更すると、元のオブジェクトから見たときのコンテンツが変わります(逆も同様)。 チャネルを閉じると、元のオブジェクトが閉じます。

このクラスは、さまざまな点で、「読込み可能」、「書込み可能」、または「読み込みと書込みが可能」であるインスタンスが必要なことを指定しています。 FileInputStreamインスタンスのgetChannelメソッドで取得されたチャネルは読込み可能です。 FileOutputStreamインスタンスのgetChannelメソッドで取得されたチャネルは書込み可能です。 最後に、RandomAccessFileインスタンスのgetChannelメソッドを介して取得されたチャネルは、インスタンスがモード"r"で作成された場合、読取り用にオープンされ、インスタンスがモード"rw"で作成された場合、読取りおよび書込み用にオープンされます。

書込み用にオープンしているファイル・チャネルは、たとえば、FileOutputStream(File,boolean)コンストラクタを呼び出して2番目のパラメータにtrueを渡すことによって作成されたファイル出力ストリームから取得された場合、「追加モード」にあります。 このモードで関連した書込み操作を呼び出すと、まず位置がファイルの末尾まで進みます。その後、要求されたデータが書き込まれます。 このような位置の移動とデータの書込みは、不可分な単一の操作として行われます。この操作は、システムに依存しているため未指定です。 このモードでは、「指定された位置に書き込む」に対するメソッドの動作もシステムに依存します。

導入されたバージョン:
1.4
関連項目: