title: FileChannel#force and buffering
body: <p>I would like to make it clear and draw some parallels between FileOutputStream and FileChannel right now.</p>
  
  <p>So first of all, <strong>it seems like the most efficient way to write file with standart Java io is to use FileOutputStream which is wrapped with BufferedOutputStream</strong>. Because it automatically flushes, when the internal buffer is overflowed. It is convenient to be able to do single writes (single bytes, floats, etc.) as well as array ones and to be not worried about speed. The only thing you should never forget is to close it (to perform the final flush). Benefits of using BufferedOutputStream wrapper are evident and <strong>must have</strong> for everyone (I hope).</p>
  
  <p>Now about FileChannel. <strong>FileChannel has force method, which is an equivalent to flush in FileOutputStream, isn't it?</strong> And javadocs clearly say, that you should use it to be sure that your changes have been made to the target file. But, I don't understand when and why should I use it, if there is no "BufferedFileChannel" wrapper. <strong>In other words, where is buffering for FileChannel? Is it automatic and hidden in FileChannel itself like in BufferedOutputStream? If not, then why on earth would I need force method, since there is nothing to force (all changes are already applied to file after using write method) and do I have to implement buffering by myself?</strong></p>