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