0

filechannel.force を呼び出して例外をスローするとどうなりますか?

filechannel.write が成功し、バッファ コンテンツ全体をファイル チャネルに書き込むことができたとき、すべてがディスクにフラッシュされたかどうかを確認したいと思います。例外をスローできる force(true) を呼び出します。ファイルチャネルに書き込んだデータはどうなりますか? ディスクに何もフラッシュされませんでしたか、それともデータの一部がフラッシュされた可能性がありますか? 操作をロールバックするにはどうすればよいですか?

public boolean flush(ByteBuffer[] buffers, long buffersRemaining)
{
    try
    {
        FileChannel fileChannel = new RandomAccessFile(target, "rw").getChannel();
         long writtenBytes = fileChannel.write(buffers);  
         //we think we have written all the data into filechannel
         if(writtenBytes == buffersRemaining)
         {
            //we try to flush, but we get an exception
            try
            {
                fileChannel.force(true);
                fileChannel.close();
            }
            catch(IOException exception)
            {
                //???
                return false;
            }
         }                 
    }
    catch(Exception exception)
    {
      //log exception
      return false;
    }
}
4

1 に答える 1

0

例外について何かできる場合にのみ、例外を処理するようにしてください。これは、意味を成さないケースの 1 つです。これは通常は発生しないはずです。例外をログに記録し、正常に失敗します。

于 2014-07-29T09:37:19.523 に答える