JavaTM Platform
Standard Ed. 6

java.nio.channels
クラス FileChannel

java.lang.Object
  上位を拡張 java.nio.channels.spi.AbstractInterruptibleChannel
      上位を拡張 java.nio.channels.FileChannel
すべての実装されたインタフェース:
Closeable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel

public abstract class FileChannel
extends AbstractInterruptibleChannel
implements ByteChannel, GatheringByteChannel, ScatteringByteChannel

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

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

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

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

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

このクラスは、既存のファイルを開くメソッドや新しいファイルを作成するメソッドは定義しません。こうしたメソッドは、将来のリリースで追加される可能性があります。このたびのリリースでファイルチャネルを取得したい場合は、既存の FileInputStreamFileOutputStreamRandomAccessFile のいずれかのオブジェクトの getChannel メソッドを呼び出します。こうすることにより、基礎にある同じファイルに接続されたファイルチャネルが返されます。

ファイルチャネルの状態は、チャネルを返した getChannel メソッドを持つオブジェクトの状態と密接な関係にあります。たとえば、チャネルの位置を明示的に、あるいはバイトの読み込みや書き込みによって変更すると、発生元のオブジェクトのファイル位置が変わります (逆も同様)。ファイルチャネルからファイルの長さを変更すると、発生元オブジェクトから見たときの長さが変わります (逆も同様)。バイトの書き込みによってファイルのコンテンツを変更すると、元のオブジェクトから見たときのコンテンツが変わります (逆も同様)。

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

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

導入されたバージョン:
1.4
関連項目:
FileInputStream.getChannel(), FileOutputStream.getChannel(), RandomAccessFile.getChannel()

入れ子のクラスの概要
static class FileChannel.MapMode
          ファイルマッピングモードの型保証された列挙です。
 
コンストラクタの概要
protected FileChannel()
          このクラスの新しいインスタンスを初期化します。
 
メソッドの概要
abstract  void force(boolean metaData)
          このチャネルのファイルの更新内容は、その記憶装置に強制的に書き込まれます。
 FileLock lock()
          このチャネルのファイル上に排他ロックを設定します。
abstract  FileLock lock(long position, long size, boolean shared)
          このチャネルのファイルの指定された領域をロックします。
abstract  MappedByteBuffer map(FileChannel.MapMode mode, long position, long size)
          このチャネルのファイルの領域を直接メモリーにマッピングします。
abstract  long position()
          このチャネルのファイル位置を返します。
abstract  FileChannel position(long newPosition)
          このチャネルのファイル位置を設定します。
abstract  int read(ByteBuffer dst)
          このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
 long read(ByteBuffer[] dsts)
          このチャネルのバイトシーケンスを指定されたバッファーに読み込みます。
abstract  long read(ByteBuffer[] dsts, int offset, int length)
          このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスに読み込みます。
abstract  int read(ByteBuffer dst, long position)
          このチャネルのバイトシーケンスを、指定されたファイル位置からバッファーに読み込みます。
abstract  long size()
          このチャネルのファイルの現在のサイズを返します。
abstract  long transferFrom(ReadableByteChannel src, long position, long count)
          指定された読み込み可能なバイトチャネルからこのチャネルのファイルへバイトを転送します。
abstract  long transferTo(long position, long count, WritableByteChannel target)
          このチャネルのファイルから指定された書き込み可能なバイトチャネルへバイトを転送します。
abstract  FileChannel truncate(long size)
          このチャネルのファイルの末尾を切り詰め、指定されたサイズにします。
 FileLock tryLock()
          このチャネルのファイル上で排他ロックを獲得しようとします。
abstract  FileLock tryLock(long position, long size, boolean shared)
          このチャネルのファイルの指定された領域でロックを獲得しようとします。
abstract  int write(ByteBuffer src)
          このチャネルのバイトシーケンスを指定のバッファーから書き出します。
 long write(ByteBuffer[] srcs)
          このチャネルのバイトシーケンスを指定されたバッファーから書き出します。
abstract  long write(ByteBuffer[] srcs, int offset, int length)
          このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスから書き出します。
abstract  int write(ByteBuffer src, long position)
          指定されたバッファーのバイトシーケンスをこのチャネルの指定されたファイル位置に書き込みます。
 
クラス java.nio.channels.spi.AbstractInterruptibleChannel から継承されたメソッド
begin, close, end, implCloseChannel, isOpen
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース java.nio.channels.Channel から継承されたメソッド
close, isOpen
 

コンストラクタの詳細

FileChannel

protected FileChannel()
このクラスの新しいインスタンスを初期化します。

メソッドの詳細

read

public abstract int read(ByteBuffer dst)
                  throws IOException
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。

バイトの読み込みは、このチャネルの現在のファイル位置から開始されます。 その後、実際に読み込まれたバイト数によりファイル位置が更新されます。それ以外の場合、このメソッドは ReadableByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース ReadableByteChannel 内の read
パラメータ:
dst - バイトの転送先バッファー
戻り値:
読み込まれた文字数。ゼロか、チャネルがストリームの終わりに達している場合は -1
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 読み込み操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 読み込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

read

public abstract long read(ByteBuffer[] dsts,
                          int offset,
                          int length)
                   throws IOException
このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスに読み込みます。

バイトの読み込みは、このチャネルの現在のファイル位置から開始されます。 その後、実際に読み込まれたバイト数によりファイル位置が更新されます。それ以外の場合、このメソッドは ScatteringByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース ScatteringByteChannel 内の read
パラメータ:
dsts - バイトの転送先バッファー
offset - 最初のバイトの転送先となるバッファー配列内のオフセット。 dsts.length 以下の負でない値
length - アクセスされる最大バッファー数。 dsts.length - offset 以下の負でない値
戻り値:
読み込まれた文字数。ゼロか、チャネルがストリームの終わりに達している場合は -1
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 読み込み操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 読み込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

read

public final long read(ByteBuffer[] dsts)
                throws IOException
このチャネルのバイトシーケンスを指定されたバッファーに読み込みます。

バイトの読み込みは、このチャネルの現在のファイル位置から開始されます。 その後、実際に読み込まれたバイト数によりファイル位置が更新されます。それ以外の場合、このメソッドは ScatteringByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース ScatteringByteChannel 内の read
パラメータ:
dsts - バイトの転送先バッファー
戻り値:
読み込まれた文字数。ゼロか、チャネルがストリームの終わりに達している場合は -1
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 読み込み操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 読み込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

write

public abstract int write(ByteBuffer src)
                   throws IOException
このチャネルのバイトシーケンスを指定のバッファーから書き出します。

チャネルが追加モード以外の場合、バイトの書き出しは、このチャネルの現在のファイル位置から開始されます。 追加モードでは、最初に、位置がファイルの末尾まで進みます。ファイルのサイズは、書き込まれたバイト数に合わせ、必要であれば大きくなります。 ファイル位置は、実際に書き込まれたバイト数によって更新されます。それ以外の点で、このメソッドは WritableByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース WritableByteChannel 内の write
パラメータ:
src - バイトの取得先バッファー
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

write

public abstract long write(ByteBuffer[] srcs,
                           int offset,
                           int length)
                    throws IOException
このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスから書き出します。

チャネルが追加モード以外の場合、バイトの書き出しは、このチャネルの現在のファイル位置から開始されます。 追加モードでは、最初に、位置がファイルの末尾まで進みます。ファイルのサイズは、書き込まれたバイト数に合わせ、必要であれば大きくなります。 ファイル位置は、実際に書き込まれたバイト数によって更新されます。それ以外の点で、このメソッドは GatheringByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース GatheringByteChannel 内の write
パラメータ:
srcs - バイトの取得先バッファー
offset - 最初のバイトの取得先となるバッファー配列内のオフセット。srcs.length 以下の負でない値
length - アクセスされる最大バッファー数。 srcs.length - offset 以下の負でない値
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

write

public final long write(ByteBuffer[] srcs)
                 throws IOException
このチャネルのバイトシーケンスを指定されたバッファーから書き出します。

チャネルが追加モード以外の場合、バイトの書き出しは、このチャネルの現在のファイル位置から開始されます。 追加モードでは、最初に、位置がファイルの末尾まで進みます。ファイルのサイズは、書き込まれたバイト数に合わせ、必要であれば大きくなります。 ファイル位置は、実際に書き込まれたバイト数によって更新されます。それ以外の点で、このメソッドは GatheringByteChannel インタフェースの指定どおりに動作します。

定義:
インタフェース GatheringByteChannel 内の write
パラメータ:
srcs - バイトの取得先バッファー
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

position

public abstract long position()
                       throws IOException
このチャネルのファイル位置を返します。

戻り値:
このチャネルのファイル位置。ファイルの先頭から現在の位置までの バイト数を示す負でない整数
例外:
ClosedChannelException - このチャネルがクローズしている場合
IOException - その他の入出力エラーが発生した場合

position

public abstract FileChannel position(long newPosition)
                              throws IOException
このチャネルのファイル位置を設定します。

位置の値をファイルの現在のサイズより大きい値に設定するのは正当な処理です。 しかし、この処理によってファイルのサイズが変更されるわけではありません。ファイルの現在のサイズより大きい値が設定されている位置でバイトを読み取ろうとすると、即座にファイルの終わりが通知されます。同じ位置でバイトを書き込もうとすると、新しいバイトに合わせてファイルのサイズが大きくなります。 以前のファイルの終わりから新しく書き込まれたバイトまでの間に存在するバイトの値は未指定です。

パラメータ:
newPosition - 新しい位置。ファイルの先頭からのバイト数を示す負でない整数
戻り値:
このファイルチャネル
例外:
ClosedChannelException - このチャネルがクローズしている場合
IllegalArgumentException - 新しい位置が負の値の場合
IOException - その他の入出力エラーが発生した場合

size

public abstract long size()
                   throws IOException
このチャネルのファイルの現在のサイズを返します。

戻り値:
このチャネルのファイルの現在のサイズ (バイト単位)
例外:
ClosedChannelException - このチャネルがクローズしている場合
IOException - その他の入出力エラーが発生した場合

truncate

public abstract FileChannel truncate(long size)
                              throws IOException
このチャネルのファイルの末尾を切り詰め、指定されたサイズにします。

指定されたサイズが現在のファイルサイズよりも小さい場合、ファイルの末尾が切り詰められ、新しいファイルの終わりに収まらないバイトが破棄されます。指定されたサイズが現在のファイルサイズと同じか、それよりも大きい場合、ファイルサイズは変更されません。どちらの場合も、このチャネルのファイル位置が指定されたサイズよりも大きい場合、そのサイズに合わせてファイルサイズが変更されます。

パラメータ:
size - 新しいサイズ。負ではないバイト数
戻り値:
このファイルチャネル
例外:
NonWritableChannelException - このチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルがクローズしている場合
IllegalArgumentException - 新しいサイズが負の値の場合
IOException - その他の入出力エラーが発生した場合

force

public abstract void force(boolean metaData)
                    throws IOException
このチャネルのファイルの更新内容は、その記憶装置に強制的に書き込まれます。

このチャネルのファイルがローカルの記憶装置上にある場合、このメソッドの戻り値から、このチャネルの作成時またはこのメソッドの一番最近の呼び出し以降のファイルの変更内容がすべてそのデバイスに書き込まれていることがわかります。この方法により、システムがクラッシュしたとき、重要な情報を損失から保護できます。

一方、ファイルがローカルの記憶装置上にない場合、書き込みは行われません。

metaData パラメータを使って、このメソッドで実行しなければならない入出力操作の数を制限できます。このパラメータに false を渡した場合、記憶装置に書き込む必要があるのは、ファイルのコンテンツの更新内容だけです。 true を渡した場合は、ファイルのコンテンツとメタデータの更新内容を書き込む必要があります。これには、通常 1 個以上の入出力操作が必要です。 このパラメータに実効性があるかどうかは、基礎となるオペレーティングシステムによって決まるため、未指定です。

このメソッドを呼び出すと、チャネルが読み込み専用であっても入出力操作が発生します。たとえば、ファイルのメタデータとして最終アクセス時刻を保存し、ファイルの読み込みのたびに更新するようなオペレーティングシステムもあります。この処理が実際に行われるかどうかはシステムによって決まるため、未指定です。

このメソッドは、このクラスに定義されたメソッドによってこのチャネルのファイルに加えられた変更を強制するだけです。map メソッド呼び出しによって取得したマップされた byte バッファーのコンテンツの変更によって生じる変更は、必ずしも強制されません。マップされた byte バッファーの force メソッドを呼び出すと、バッファーコンテンツに対する変更内容が強制的に書き込まれます。

パラメータ:
metaData - true の場合、このメソッドは、ファイルのコンテンツおよびメタデータを記憶領域に強制的に書き込む必要がある。 それ以外の場合はコンテンツの変更のみを強制的に書き込む
例外:
ClosedChannelException - このチャネルがクローズしている場合
IOException - その他の入出力エラーが発生した場合

transferTo

public abstract long transferTo(long position,
                                long count,
                                WritableByteChannel target)
                         throws IOException
このチャネルのファイルから指定された書き込み可能なバイトチャネルへバイトを転送します。

このチャネルのファイルの指定された position から最大 count バイトを読み込み、ターゲットチャネルに書き込もうとします。このメソッドを呼び出しても、チャネルの本来の性質や状態によって、要求されたバイトの一部が転送されない場合もあります。このチャネルのファイルのバイト数が、指定された position から始まる count より少ない場合や、ターゲットチャネルが非ブロックモードで、出力バッファー内の空きバイト数が count より少ない場合、転送されるバイト数は要求されたバイト数より少なくなります。

このメソッドはこのチャネルの位置を変更しません。指定された位置がファイルの現在のサイズよりも大きい場合、バイトは一切転送されません。ターゲットチャネルに位置が指定されている場合、バイトはその位置から書き込まれます。 その後、書き込まれたバイト数に合わせて位置が増加します。

このチャネルからデータを読み込んでターゲットチャネルに書き込むという単純なループよりも、このメソッドのほうがずっと効率的に処理できる可能性があります。多くのオペレーティングシステムは、ファイルシステムキャッシュからターゲットチャネルへバイトを直接転送できます。 このとき、バイトのコピーは行われません。

パラメータ:
position - 転送が開始されるファイル内の位置。負でない
count - 転送される最大バイト数。負でない
target - ターゲットチャネル
戻り値:
実際に転送されたバイト数。ゼロの場合もある
例外:
IllegalArgumentException - 上記のパラメータの前提条件が満たされていない場合
NonReadableChannelException - このチャネルが読み込み可能でない場合
NonWritableChannelException - ターゲットチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルまたはターゲットチャネルがクローズしている場合
AsynchronousCloseException - 転送中に、別のスレッドによっていずれかのチャネルがクローズされた場合
ClosedByInterruptException - 転送中に別のスレッドからの割り込みがあったために両方のチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

transferFrom

public abstract long transferFrom(ReadableByteChannel src,
                                  long position,
                                  long count)
                           throws IOException
指定された読み込み可能なバイトチャネルからこのチャネルのファイルへバイトを転送します。

ソースチャネルから最大 count バイトを読み込み、このチャネルのファイルの指定された position に書き込もうとします。このメソッドを呼び出しても、チャネルの本来の性質や状態によって、要求されたバイトの一部が転送されない場合もあります。ソースチャネルのバイト数が count より少ない場合や、ソースチャネルが非ブロックモードで、入力バッファー内に残っているすぐに利用できる空きバイト数が count より少ない場合、転送されるバイト数は要求されたバイト数より少なくなります。

このメソッドはこのチャネルの位置を変更しません。指定された位置がファイルの現在のサイズよりも大きい場合、バイトは一切転送されません。ソースチャネルに位置が指定されている場合、バイトはその位置から読み取られます。 その後、読み取られたバイト数に合わせて位置が増加します。

ソースチャネルからデータを読み込んでこのチャネルに書き込むという単純なループよりも、このメソッドのほうがずっと効率的に処理できる可能性があります。多くのオペレーティングシステムは、ソースチャネルからファイルシステムキャッシュへバイトを直接転送できます。 このとき、バイトのコピーは行われません。

パラメータ:
src - ソースチャネル
position - 転送が開始されるファイル内の位置。負でない
count - 転送される最大バイト数。負でない
戻り値:
実際に転送されたバイト数。ゼロの場合もある
例外:
IllegalArgumentException - 上記のパラメータの前提条件が満たされていない場合
NonReadableChannelException - ソースチャネルが読み込み可能でない場合
NonWritableChannelException - このチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルまたはソースチャネルがクローズしている場合
AsynchronousCloseException - 転送中に、別のスレッドによっていずれかのチャネルがクローズされた場合
ClosedByInterruptException - 転送中に別のスレッドからの割り込みがあったために両方のチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

read

public abstract int read(ByteBuffer dst,
                         long position)
                  throws IOException
このチャネルのバイトシーケンスを、指定されたファイル位置からバッファーに読み込みます。

このメソッドは、バイトがチャネルの現在位置ではなく指定されたファイル位置から読み取られるという点を除けば、read(ByteBuffer)メソッドと同じです。このメソッドはこのチャネルの位置を変更しません。指定された位置がファイルの現在のサイズより大きい場合、バイトは一切読み取られません。

パラメータ:
dst - バイトの転送先バッファー
position - 転送が開始されるファイル位置。負でない
戻り値:
読み取られるバイト数。ゼロか、指定された位置がファイルの現在のサイズより大きい場合は -1
例外:
IllegalArgumentException - 位置が負の値の場合
NonReadableChannelException - このチャネルが読み込み可能でない場合
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 読み込み操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 読み込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

write

public abstract int write(ByteBuffer src,
                          long position)
                   throws IOException
指定されたバッファーのバイトシーケンスをこのチャネルの指定されたファイル位置に書き込みます。

このメソッドは、バイトがチャネルの現在位置ではなく指定されたファイル位置から書き込まれるという点を除けば、write(ByteBuffer) メソッドと同じです。このメソッドはこのチャネルの位置を変更しません。指定された位置が現在のファイルサイズより大きい場合、ファイルサイズは新しいバイトに合わせて大きくなります。 以前のファイルの終わりと新しく書き込まれたバイトの間のバイトの値は未指定です。

パラメータ:
src - バイトの転送元バッファー
position - 転送が開始されるファイル位置。負でない
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
IllegalArgumentException - 位置が負の値の場合
NonWritableChannelException - このチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、 現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

map

public abstract MappedByteBuffer map(FileChannel.MapMode mode,
                                     long position,
                                     long size)
                              throws IOException
このチャネルのファイルの領域を直接メモリーにマッピングします。

ファイルの領域をメモリーにマッピングする処理は、次の 3 つのモードうちいずれかで行われます。

このチャネルは、読み込み専用のマッピングの場合は読み込み、読み込み/書き込みのマッピングまたは非公開マッピングの場合は読み込みと書き込みの両方が可能になっていなければなりません。

このメソッドが返すマップされた byte バッファーの位置はゼロ、リミットと容量は size です。 マークは未定義になります。バッファーとこのバッファーが示すマッピングは、バッファー自体がガベージコレクトされるまで有効です。

マッピングの結果は、その作成に使用されたファイルチャネルには依存しません。たとえば、チャネルをクローズしても、マッピングの有効性は変わりません。

多くの場合、メモリーにマッピングされたファイルの詳細は、本質的に基礎となるオペレーティングシステムに依存するため、未指定です。要求された領域がこのチャネルのファイル内に完全には含まれていない場合、このメソッドの動作は未指定です。基礎となるファイルのコンテンツまたはサイズのどちらが変更されたか、このプログラムによる変更または別のプログラムによる変更のどちらか、および、変更がバッファーに伝達されるかどうかは未指定です。バッファーの変更がファイルに伝達される速度は未指定です。

ほとんどのオペレーティングシステムでは、ファイルをメモリーにマッピングするほうが、通常の read メソッドまたは write メソッドを使って数十キロバイトのデータの読み込みまたは書き込みを行うよりも負荷が大きくなります。性能を重視するなら、比較的大きめのファイルだけをマッピングすることをお勧めします。

パラメータ:
mode - ファイルのマッピングを読み取り専用モードで行う場合は FileChannel.MapMode クラスに定義されている定数 READ_ONLY、 読み取り/書き込みモードで行う場合は同クラスに定義されている定数 READ_WRITE、 非公開 (copy-on-write) モードで行う場合は同クラスに定義されている定数 PRIVATE
position - ファイル内のマッピングされた領域の開始位置。負でない
size - マッピングされる領域のサイズ。 負でない、Integer.MAX_VALUE 以下の値
例外:
NonReadableChannelException - modeREAD_ONLY であるのに、このチャネルが読み込み不可の状態になっていた場合
NonWritableChannelException - modeREAD_WRITE または PRIVATE であるのに、 チャネルが読み取り/書き込み不可の状態になっていた場合
IllegalArgumentException - 上記のパラメータの前提条件が満たされていない場合
IOException - その他の入出力エラーが発生した場合
関連項目:
FileChannel.MapMode, MappedByteBuffer

lock

public abstract FileLock lock(long position,
                              long size,
                              boolean shared)
                       throws IOException
このチャネルのファイルの指定された領域をロックします。

このメソッドの呼び出しは、領域がロックされるか、このチャネルがクローズされるか、スレッドの呼び出しに割り込みが発生するまでブロックされます。

このメソッドの呼び出し中にこのチャネルが別のスレッドによってクローズされると、AsynchronousCloseException がスローされます。

ロックの獲得を待機中にスレッド呼び出しに割り込みが発生した場合、割り込み状態が設定され、FileLockInterruptionException がスローされます。このメソッドの呼び出し時に呼び出し元の割り込み状態が設定されると、ただちに例外がスローされます。 スレッドの割り込み状態は変更されません。

position パラメータと size パラメータで指定された領域が、基礎にあるファイルに含まれていたり、そのファイルとオーバーラップしたりしている必要はありません。ロック領域のサイズは固定です。 初期状態ではファイルの終わりがロック領域内に含まれていても、ファイルサイズがこの領域より大きくなってしまった場合、新しい部分にはロックが適用されません。ファイル全体にロックを適用する必要があるにもかかわらず、ファイルサイズが大きくなる可能性がある場合は、ゼロから予測される最大ファイルサイズ以上までの領域をロックします。ゼロ引数の lock() メソッドは、単純にサイズ Long.MAX_VALUE の領域をロックします。

共有ロックをサポートしないオペレーティングシステムでは、共有ロック要求が排他ロック要求に自動的に変換されます。新しく獲得したロックが共有ロックであるか排他ロックであるかは、結果として得られるロックオブジェクトの isShared メソッドを呼び出すことで判断できます。

ファイルロックは Java 仮想マシン全体のために保持されます。これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するのには適していません。

パラメータ:
position - ロック領域が開始されるファイル位置。負でない
size - ロック領域のサイズ。負でない。position + size の合計も負でない
shared - 共有ロックを要求する場合は true。この場合、このチャネルは読み取りが (場合によっては書き込みも) 可能でなければならない。 排他ロックを要求する場合は false。この場合、このチャネルは書き込みが (場合によっては読み取りも) 可能でなければならない
戻り値:
新規獲得ロックを表すロックオブジェクト
例外:
IllegalArgumentException - 上記のパラメータの前提条件が満たされていない場合
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - このメソッド内でスレッド呼び出しがブロックされている間に、別のスレッドによってこのチャネルがクローズされた場合
FileLockInterruptionException - 呼び出し元スレッドが、このメソッド内でブロックされている間に 割り込みを受けた場合
OverlappingFileLockException - 要求された領域をオーバーラップするロックがこの Java 仮想マシンにすでに確保されている場合。 または、このメソッド内でブロックされている別のスレッドがオーバーラップした領域をロックしようとしている場合
NonReadableChannelException - sharedtrue であれば、このチャネルは読み取り不可の状態
NonWritableChannelException - sharedfalse であるにもかかわらず、このチャネルが書き込み不可の状態である場合
IOException - その他の入出力エラーが発生した場合
関連項目:
lock(), tryLock(), tryLock(long,long,boolean)

lock

public final FileLock lock()
                    throws IOException
このチャネルのファイル上に排他ロックを設定します。

このメソッドを fc.lock() の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。

fc.lock(0L, Long.MAX_VALUE, false) 

戻り値:
新規獲得ロックを表すロックオブジェクト
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - このメソッド内でスレッド呼び出しがブロックされている間に、別のスレッドによってこのチャネルがクローズされた場合
FileLockInterruptionException - 呼び出し元スレッドが、このメソッド内でブロックされている間に 割り込みを受けた場合
OverlappingFileLockException - 要求された領域をオーバーラップするロックがこの Java 仮想マシンにすでに確保されている場合。 または、このメソッド内でブロックされている別のスレッドが同じファイルのオーバーラップした領域をロックしようとしている場合
NonWritableChannelException - このチャネルが書き込み可能でない場合
IOException - その他の入出力エラーが発生した場合
関連項目:
lock(long,long,boolean), tryLock(), tryLock(long,long,boolean)

tryLock

public abstract FileLock tryLock(long position,
                                 long size,
                                 boolean shared)
                          throws IOException
このチャネルのファイルの指定された領域でロックを獲得しようとします。

このメソッドはブロックされません。このメソッドを呼び出すと、要求された領域でロックを獲得したか、ロックの獲得に失敗したかを示す結果がただちに返されます。オーバーラップしたロックが別のプログラムによって保持されていたためロックに失敗した場合、null が返されます。その他の原因でロックに失敗した場合は、適切な例外がスローされます。

position パラメータと size パラメータで指定された領域が、基礎にあるファイルに含まれていたり、そのファイルとオーバーラップしたりしている必要はありません。ロック領域のサイズは固定です。 初期状態ではファイルの終わりがロック領域内に含まれていても、ファイルサイズがこの領域より大きくなってしまった場合、新しい部分にはロックが適用されません。ファイル全体にロックを適用する必要があるにもかかわらず、ファイルサイズが大きくなる可能性がある場合は、ゼロから予測される最大ファイルサイズ以上までの領域をロックします。ゼロ引数の tryLock() メソッドは、単純にサイズ Long.MAX_VALUE の領域をロックします。

共有ロックをサポートしないオペレーティングシステムでは、共有ロック要求が排他ロック要求に自動的に変換されます。新しく獲得したロックが共有ロックであるか排他ロックであるかは、結果として得られるロックオブジェクトの isShared メソッドを呼び出すことで判断できます。

ファイルロックは Java 仮想マシン全体のために保持されます。これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するのには適していません。

パラメータ:
position - ロック領域が開始されるファイル位置。負でない
size - ロック領域のサイズ。負でない。position + size の合計も負でない
shared - 共有ロックを要求する場合は true、排他ロックを要求する場合は false
戻り値:
新規獲得ロックを表すロックオブジェクト。オーバーラップしたロックが別のプログラムによって確保されていたため ロックに失敗した場合は null
例外:
IllegalArgumentException - 上記のパラメータの前提条件が満たされていない場合
ClosedChannelException - このチャネルがクローズしている場合
OverlappingFileLockException - 要求された領域をオーバーラップするロックがこの Java 仮想マシンにすでに確保されている場合。 または、このメソッド内でブロックされている別のスレッドが同じファイルのオーバーラップした領域をロックしようとしている場合
IOException - その他の入出力エラーが発生した場合
関連項目:
lock(), lock(long,long,boolean), tryLock()

tryLock

public final FileLock tryLock()
                       throws IOException
このチャネルのファイル上で排他ロックを獲得しようとします。

このメソッドを fc.trylock() の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。

fc.tryLock(0L, Long.MAX_VALUE, false) 

戻り値:
新規獲得ロックを表すロックオブジェクト。オーバーラップしたロックが別のプログラムによって確保されていたため ロックに失敗した場合は null
例外:
ClosedChannelException - このチャネルがクローズしている場合
OverlappingFileLockException - 要求された領域をオーバーラップするロックがこの Java 仮想マシンにすでに確保されている場合。 または、このメソッド内でブロックされている別のスレッドがオーバーラップした領域をロックしようとしている場合
IOException - その他の入出力エラーが発生した場合
関連項目:
lock(), lock(long,long,boolean), tryLock(long,long,boolean)

JavaTM Platform
Standard Ed. 6

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

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