2009-07-02 7 views
2

RandomAccessFileを使用して、トランザクションの一部としてファイルへの書き込みを実行しています。トランザクションをコミットする前に、データがディスクに書き込まれていることを確かめたいと思います。 RAFのFileChannelforce(boolean)を呼び出すと、この保証が得られますが、ファイルを閉じると暗黙的に呼び出されるのですか、それとも手動で呼び出す必要がありますか?RandomAccessFile.close()は内部的にFileChannel.force()を呼び出しますか?

また、force()が実際に何を信用しているかについての洞察はありますか?実際にはどこかのキャッシュにまだ座っているときに、OSがデータがディスクに書き込まれたと報告する可能性はありますか?このOS/HDD /ファイルシステムはどの程度まで依存していますか?

答えて

0

これは完全にFSに依存します。ただし、(IO)例外が発生しない場合は、JVMを信頼してトランザクションをコミットする必要があります。あなたがFSを信頼できるかどうかはもう一つの質問です。たとえば、遅延割り当てが有効になっているext4を使用すると、RandomAccessFile#force(boolean)が正常に返された後でも、瞬時にデータが失われる可能性があります。 JVMは、オペレーティングシステムのFS-APIに依存しており、実際の実装と構成には関心がありません。

はい、閉じる前にRandomAccessFile#force(boolean)を呼び出す必要があります。 #closeが#forceを呼び出すかどうかは、FileChannelの実装に依存します。

関連する問題