Pergunta

Eu estou usando RandomAccessFile para executar algumas gravações para um arquivo como parte de uma transação. Antes que eu entrego o meu transação, eu quero ter certeza absoluta de que os dados são gravados no disco. Chamando force(boolean) em FileChannel da RAF parece dar essa garantia, mas é chamado implicitamente quando eu fechar o arquivo, ou eu tenho que chamá-lo manualmente?

Além disso, alguém tem qualquer visão sobre o que force() realmente faz, e até que ponto se pode confiar? É possível que o sistema operacional pode relatar que os dados foram gravados em disco, quando na verdade ele ainda está sentado em algum lugar cache? Até que ponto é este OS / HDD / filesystem-dependente?

Foi útil?

Solução

Esta é completamente FS-dependente. Mas se você não fizer uma exceção (IO), você deve confiar na JVM e comprometer sua transação. Se você pode confiar em seus FS é a outra pergunta. Por exemplo, se você usar ext4 tendo alocação atrasada ativado, você poderá perder dados em uma perda de potência instantânea, mesmo depois RandomAccessFile # vigor (boolean) retornado com êxito. O JVM depende da FS-API de seu sistema operacional e não se preocupa com a implementação e configuração real.

E sim, você tem que chamar RandomAccessFile # vigor (boolean) antes de fechar. Se #Fechar invoca #force é até a implementação do FileChannel.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top