关闭缓冲区之前,务必调用flush()方法

来源:互联网 发布:html与javascript if 编辑:程序博客网 时间:2024/06/05 06:02

    这几天在看Java IO,感觉很乱。因为很重要,所以硬着头皮反复看,终于有点头绪。

    昨晚写得测试代码只有FileReader,刚才上机课闲着没事,修改了下,增加了FileWriter、BufferedReader和BufferedWriter。

如题,本文不想讲解怎么使用上面的类,只是想说一下flush()方法很重要!

    开始的时候,在D盘根目录下建了个 love.txt文件,很小,就几个字符。开始没调用flush()方法,生成的android.txt文件下竟然是空的,预想的应该是love.txt文件内容的复制。反复看这段代码,难道是FileWriter或者BufferedWriter没用对,发现这部分没错。然后就看API,正好看到了flush()方法,然后恍然大悟。我竟然把这么重要的事儿忘了,关闭缓冲区前,应该把缓冲区的“残余”数据强制写出。后来,我把love.txt里的内容增加到了192k,先不调用flush(),那么输出的android.txt文件只有190k,很明显,数据有丢失,丢失的就是缓冲区“残余”的数据。后来调用flush(),输出的android.txt文件和love.txt文件的大小一样,数据没有丢失。

开始的时候因为love.txt文件的内容太少了,还没装满缓冲区,被当成“残余”数据了,所以没复制过去。后来把love.txt文件增大,发现了是数据丢失了。。。

API对flush()方法说明如下: 

public void flush()
throws IOException刷新该流的缓冲。

个人感觉“刷新”一词用的不贴切,应该用"强制写出缓冲区的数据"比较贴切。
小小flush()的用处竟然这么大,这回我可记忆犹新,永远忘不掉了。
饿了,带着好心情吃饭去。。。

 


 

 

 

原创粉丝点击