JavaTM 2
Platform
Std. Ed. v1.4.0

java.nio.channels
クラス FileChannel

java.lang.Object
  |
  +--java.nio.channels.spi.AbstractInterruptibleChannel
        |
        +--java.nio.channels.FileChannel
すべての実装インタフェース:
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
例外:
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
例外:
IOException - その他の入出力エラーが発生した場合

read

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

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

定義:
インタフェース ScatteringByteChannel 内の read
パラメータ:
dsts - バイトの転送先バッファ
戻り値:
読み込まれた文字数。ゼロか、チャネルがストリームの終わりに達している場合は -1
例外:
IOException - その他の入出力エラーが発生した場合

write

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

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

定義:
インタフェース WritableByteChannel 内の write
パラメータ:
src - バイトの取得先バッファ
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
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 以下のゼロまたは正の数
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
IOException - その他の入出力エラーが発生した場合

write

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

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

定義:
インタフェース GatheringByteChannel 内の write
パラメータ:
srcs - バイトの取得先バッファ
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
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
このチャネルのファイルの末尾を切り捨て、指定されたサイズにします。

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

戻り値:
このファイルチャネル
例外:
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 より少ない場合、転送されるバイト数は要求されたバイト数より少なくなります。

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

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

パラメータ:
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 仮想マシンにすでに確保されている場合、または、このメソッド内でブロックされている別のスレッドが同じファイルのオーバーラップした領域をロックしようとしている場合
NonReadableChannelException - sharedtrue であれば、このチャネルは読み込み不可の状態
NonWritableChannelException - sharedfalse であるにもかかわらず、このチャネルが書き込み不可の状態である場合
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 2
Platform
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.