今、それを明確にして、FileOutputStreamとFileChannelの間にいくつかの類似点を描きたいと思います。
したがって、まず第一に、標準のJava ioでファイルを書き込む最も効率的な方法は、BufferedOutputStreamでラップされたFileOutputStreamを使用することであるように思われます。自動的にフラッシュするため、内部バッファがオーバーフローした場合。配列の書き込みだけでなく、シングル書き込み(シングルバイト、フロートなど)も実行でき、速度を気にしないと便利です。決して忘れてはならない唯一のことは、それを閉じることです(最後のフラッシュを実行するため)。BufferedOutputStreamラッパーを使用する利点は明らかであり、すべての人にとって必要です(私は願っています)。
次にFileChannelについて。FileChannelには、FileOutputStreamのflushと同等のforceメソッドがありますね。そしてjavadocsは、ターゲットファイルに変更が加えられたことを確認するためにそれを使用する必要があることを明確に述べています。しかし、「BufferedFileChannel」ラッパーがない場合、いつ、なぜそれを使用する必要があるのかわかりません。言い換えれば、FileChannelのバッファリングはどこにありますか?それは自動で、BufferedOutputStreamのようにFileChannel自体に隠されていますか?そうでない場合は、強制するものがないため(writeメソッドを使用した後、すべての変更がファイルにすでに適用されているため)、なぜforceメソッドが必要になるのでしょうか。また、自分でバッファリングを実装する必要がありますか?