2015-10-19 4 views
5

Javaでは、を受け取った人はで完了を待つことができます。そのget()呼び出しが戻るが、書き込みはディスク、または単にページキャッシュに書き込まれているAsynchronousFileChannelはいつ書き込むのですか?

私が興味を持っている具体的なプラットフォームは、Linux & ext4です。

答えて

1

このドキュメントをチェックアウト:

https://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousFileChannel.html#force(boolean)

それも、ディスクに書き込まれた内容を防ぐことができ、オペレーティング・システム・レベルでFuture、そこにいくつかのいくつかのキャッシュにgetメソッドが復帰した後のように見えます。あなたが本当に確かめたいなら、私はFutureが返った後にforceをやらなければならないと思います。

関連抜粋:

は、それを含むストレージ デバイスに書き込まれるように、このチャネルのファイルへの更新を強制します。このチャネルのファイルは、ローカル ストレージデバイス上に存在する場合、このメソッドが返すとき、それが保証されているファイルに対して行われたすべての 変更は、このチャネルが作成されてから、またはこの メソッドが最後に呼び出されたためというそして、そのデバイスに書き込まれています。この は、システムクラッシュの イベントで重要な情報が失われないようにするのに役立ちます。

ファイルは、そのような保証 が行われていないローカルデバイス上に存在しない場合。

メタデータパラメータは、この方法は、実行するために必要であることをI/O 操作の数を制限するために使用することができます。 にfalseを渡すと、このパラメータはファイルの内容の更新のみがストレージに書き込まれる必要があることを示します。 trueを渡すと、 ファイルのコンテンツとメタデータの両方の更新が書き込まれなければならないことが示されます。通常、少なくとも1回以上のI/O操作が追加されます( )。このパラメータが実際に のエフェクトを持っているかどうかは、基礎となるオペレーティングシステムに依存し、したがって、 は不特定です。

I/O操作が チャンネルのみ読み込みのために開かれた場合でも発生する可能性があり、このメソッドを呼び出します。一部のオペレーティングシステムでは、 の例では、ファイルのメタデータの一部として最終アクセス時刻を保持しています。この時点では、ファイルが読み取られるたびに が更新されます。これが であるかどうかは、システムに依存するため、指定されていません。

このメソッドは、このクラスで定義されたメソッドを経由してこの チャネルのファイルに加えられた変更を強制的にのみ保証されます。

関連する問題