При чтении javadoc в методе FileSesciptor .sync () очевидно, что sync () в первую очередь касается фиксации любых измененных буферов обратно в основное хранилище. То есть, убедившись, что все, что у вашей программы есть вывод , действительно попадет на диск (или в сокет или что-то еще, но мой вопрос касается в основном дисков).
А как насчет другого направления, а как насчет INPUT? Предположим, что в моей программе есть некоторые части файла java.io.RandomAccessFile, буферизованные в памяти, и я хочу ПРОЧИТАТЬ эти части файла, но, возможно, какой-то другой процесс изменил эти части файла после того, как моя программа прочитала эти блоки в последний раз?
Это похоже на пометку переменной как 'volatile' в программе на Си; что-то еще, возможно, изменило «реальную версию» чего-то, что у вас просто есть удобная копия.
Т.е., как вы можете быть уверены, что то, что читает ваша Java-программа, по крайней мере достаточно современно?
(Понятно, что определение «актуальная» имеет значение. Чисто в качестве примера, предположим, что другой процесс, тот, который записывает в файл, делает это примерно раз в секунду, и предположим, что чтение Процесс считывает, может быть, один раз в минуту. В такой ситуации производительность не имеет большого значения, просто нужно убедиться, что то, что читает читатель, согласуется с тем, что пишет пишет, с точностью до секунды.)