Флэш-концепция ввода-вывода против синхронизации

Я столкнулся с этими двумя терминами, и мое понимание их, кажется, пересекается друг с другом. Сброс используется с буферами, а синхронизация используется, чтобы говорить о сохраняющихся изменениях файла на диск.

В 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();

Рекомендации:

Другие вопросы по тегам