Нужны ли FileChannel.force и FileDescriptor.sync? - PullRequest
9 голосов
/ 13 апреля 2011

В /568523/deistvitelno-prinuditelno-sinhronizirovat-ochistit-fail-v-java, автор пишет в сводке ответов:

Используйте c.force (true), затем s.getFD (). Sync () для Java NIO

Мой вопрос: вам действительно нужны оба?Не достаточно ли силы?Разве не принудительно и не синхронизируются только разные интерфейсы для одного и того же?Я не могу найти место, где это подтверждается.

1 Ответ

12 голосов
/ 17 апреля 2011

Насколько я понимаю, правильный ответ - нет.

FileChannel .force вызывает fdatasync или fsync . Это можно увидеть в jdk / src / solaris / native / sun / nio / ch / FileChannelImpl.c в исходном коде OpenJDK. FileDescriptor вызывает fsync (Чтобы выяснить это было более сложным. Я наконец-то проследил это до jvm.cpp).

Я "автор" связанного вопроса. Так что я был не прав. Чего НЕ достаточно, так это FileOutputStream.flush. , потому что он не работает. Поэтому вам либо нужна сила, либо синхронизация.

...