1

MappedByteBuffer の変更がディスクに同期されていることを確認したい場合、必要ですrandomAcccessFile.getFD().sync()か、mappedByteBuffer.force()またはその両方ですか? (私の簡単なテストでは、それらのどれも必要ないようです - 紛らわしい...)

誰かが実際の基本的な操作について考えているか、少なくとも違いがあれば説明できますか?

4

1 に答える 1

2

まず、FileDescriptor.sync は FileChannel.force と同等です (POSIX fsync メソッドを呼び出します)。

第二に、Ron Hitchens の書籍「Java NIO」( Google Books 経由) の MappedByteBuffer に関する章には、次のように書かれています。

MappedByteBuffer.force() は、FileChannel クラスの同名のメソッドに似ています。マップされたバッファに加えられた変更は、永続的なディスク ストレージに強制的にフラッシュされます。MappedByteBuffer オブジェクトを介してファイルを更新する場合は、常に FileChannel.force() ではなく MappedByteBuffer.force() を使用する必要があります。チャネル オブジェクトは、マップされたバッファを介して行われたすべてのファイル更新を認識していない場合があります。MappedByteBuffer には、ファイル メタデータをフラッシュしないというオプションはありません。これも常にフラッシュされます。FileChannel.force の場合と同様に、非ローカル ファイルシステムに関する考慮事項がここでも適用されることに注意してください。

あ、はい。MappedByteBuffer.force を呼び出す必要があります。

しかし、その後、少なくとも Windows では両方の呼び出しが必要になる可能性があることを示すこのバグを見つけました。

于 2012-12-23T14:28:41.580 に答える