RandomAccessFile.close()は内部的に)(FileChannel.forceを呼び出していますか?
-
21-08-2019 - |
質問
私は、トランザクションの一部としてファイルにいくつかの書き込みを実行するためにRandomAccessFileを使用しています。私は私のトランザクションをコミットする前に、私は、データがディスクに書き込まれることが確実になりたいです。
RAFのforce(boolean)
にFileChannel
を呼び出すと、この保証を提供するように見えるが、私は、ファイルを閉じる、または私はそれを手動で呼び出す必要がないときには、暗黙的に呼び出される?
また、誰もが実際に何をするかforce()
、そしてどこまでそれが信頼できるに任意の洞察力を持っているのですか?それは実際にはまだどこかキャッシュに座っているときOSは、データがディスクに書き込まれたことを報告することが可能ですか?どの程度までである。このOS / HDD /ファイルシステムに依存する?
解決
これは完全にFS-依存しています。あなたは(IO)例外を取得しない場合でも、あなたはJVMを信頼し、あなたのトランザクションをコミットする必要があります。あなたのFSを信頼できるかどうかは、他の質問です。あなたが有効配分を遅らせたのext4を使用する場合たとえば、あなたはRandomAccessFileの番号力(ブール値)が正常に戻った後も、瞬時電力損失上のデータが失われる可能性があります。 JVMは、オペレーティングシステムのFS-APIに依存し、実際の実装と設定を気にしません。
そして、はい、あなたは閉じる前のRandomAccessFileの#力(boolean)を呼び出す必要があります。 #閉じるには#forceを起動するかどうかは、のFileChannelの実装に任されています。
所属していません StackOverflow