Вот ответ, специфичный для файловой системы Linux.
Согласно источнику для sun.nio.fs.UnixChannelFactory
, эти параметры отображаются соответственно для параметров O_SYNC
и O_DSYNC
open()
, документация которых гласит:
В документации для fdatasync(2)
затем прямо указывается, что все несущественное для извлечения данных файла, такое как время последнего доступа и время последнего изменения , не сбрасывается O_DSYNC
, но все, что есть, это:
fsync () передает ("сбрасывает") все измененные данные в ядре (т.е.
изменен буферный кеш страниц для) файла, на который ссылается файл
дескриптор fd к дисковому устройству (или другому постоянному запоминающему устройству)
так что вся измененная информация может быть получена даже после
система упала или была перезагружена. ... Звонок блокируется до устройства
сообщает, что передача завершена. Также сбрасывает метаданные
информация, связанная с файлом (см. stat (2)).
fdatasync () аналогичен fsync (), но не сбрасывает измененные
метаданные, если только эти метаданные не нужны для
последующий поиск данных должен быть правильно обработан. Например,
изменяется на st_atime или st_mtime (соответственно, время последнего доступа
и время последней модификации; см. stat (2)) не требует промывки
потому что они не являются необходимыми для последующего чтения данных, чтобы быть
обрабатывается правильно. С другой стороны, изменение размера файла
(st_size, как сделано, скажем, ftruncate (2)), потребует метаданных
вровень.
Таким образом, обоснованное предположение таково, если программа не использует эти атрибуты, не важные для данных (и важна синхронизация их значений). StandardOpenOption.DSYNC
приемлемо. (Хотя я не уверен, сколько практических преимуществ можно получить при выборе DSYNC
вместо SYNC
.)
Просматривая BasicFileAttributes
, такие поля, как creationTime()
, lastModifiedTime()
, lastAccessTime()
, вероятно, попадают в эту категорию "не важно для доступа к данным", тогда как такие поля, как isDirectory()
, isRegularFile()
, is*()
и size()
, вероятно, не будут, поскольку я не могу представить, что данные доступны, если они неверны.