Флэш-концепция ввода-вывода против синхронизации
Я столкнулся с этими двумя терминами, и мое понимание их, кажется, пересекается друг с другом. Сброс используется с буферами, а синхронизация используется, чтобы говорить о сохраняющихся изменениях файла на диск.
В C fflush (stdin) гарантирует, что буфер очищен. И fsync для сохранения изменений файла на диск.
Если эти понятия не определены повсеместно, предпочтут Linux, Java объяснение.
Я нашел соответствующий пост, но я действительно не отвечаю на мой вопрос. Действительно заставить файл синхронизации / сброса в Java
1 ответ
На Яве flush()
Метод используется в выходных потоках и средствах записи, чтобы гарантировать, что буферизованные данные будут записаны. Однако, согласно Javadocs:
Если предполагаемый пункт назначения этого потока является абстракцией, предоставленной базовой операционной системой, например файлом, то очистка потока гарантирует только то, что байты, ранее записанные в поток, передаются в операционную систему для записи; это не гарантирует, что они действительно записаны на физическое устройство, такое как дисковод.
С другой стороны, FileDescriptor.sync()
может использоваться для гарантии того, что данные, буферизованные ОС, будут записаны на физическое устройство (диск). Это так же, как sync
позвоните в Linux / POSIX.
Если ваше Java-приложение действительно должно обеспечить физическую запись данных на диск, вам может понадобиться flush
а также sync
Например:
FileOutputStream out = new FileOutputStream(filename);
[...]
out.flush();
out.getFD().sync();
Рекомендации: