Нужны ли FileChannel.force и FileDescriptor.sync?
В /questions/45683447/dejstvitelno-zastavit-fajl-sinhronizatsii-sbrosa-v-java автор пишет в кратком изложении ответов:
Используйте c.force(true), а затем s.getFD(). Sync() для Java NIO.
Мой вопрос: вам действительно нужны оба? Не достаточно ли силы? Разве силы и не синхронизируют только разные интерфейсы для одного и того же? Я не могу найти место, где это подтверждается.
1 ответ
Насколько я понимаю, правильный ответ - нет.
FileChannel.force вызывает fdatasync или fsync. Это можно увидеть в jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c в исходном коде OpenJDK. FileDescriptor вызывает fsync (чтобы выяснить это было более сложным. Я наконец-то проследил его до jvm.cpp).
Я "автор" связанного вопроса. Так что я был неправ. Чего не достаточно, так это FileOutputStream.flush. потому что это неоперация. Поэтому вам либо нужна сила, либо синхронизация.