我的理解:输出流呢,类似于一根管道,输出的时候先放到管道里,然后管道满了存到介质上(硬盘或其他地方),当我们输出完后管道里面可能还有剩余,就用flush()清空管道即全部存到介质上。好象java默认的缓冲区是8kb?(我也忘了),就是说只有每填满8kb才会提交一次,当少于这个值时就不会提交,所以最后为防止有未提交数据就flush()一下,强行提交生于数据
也就是说,一般输出流关闭之前要用下这个方法。
这个是缓冲区的问题.
java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发.
而flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满.
所以如果在用流的时候,没有用flush()这个方法,很多情况下会出现流的另一边读不到数据的问题,特别是在数据特别小的情况下.
具体原理太长 我给你个网址吧:
http://fsz521job.itpub.net/post/5606/34827