关闭缓冲区之前,务必调用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()的用处竟然这么大,这回我可记忆犹新,永远忘不掉了。
饿了,带着好心情吃饭去。。。
- 关闭缓冲区之前,务必调用flush()方法
- 为什么部分IO流在调用Close()方法之前要先调用flush()方法
- IO流缓冲区的清空(flush方法)
- JAVA Runtime.addShutdownHook()方法{拿到线程句柄,在程序关闭之前调用释放资源}
- 20110327-8.3-warning-如果程序崩溃了,则不会刷新缓冲区,最好的方法是保证所有的输出操作都显式地调用了flush或endl
- CGI::Session什么时候需要手动调用flush()方法呢?
- BufferedWriter通过字符数组来缓冲数据,当缓冲区满或者用户调用flush()函数时,它就会将缓冲区的数据写入到输出流中。
- Oracle 数据库安装之前,几篇务必参考的文章
- Oracle 数据库安装之前,几篇务必参考的文章
- Oracle 数据库安装之前,几篇务必参考的文章
- flush(stdin)刷新标准输入缓冲区
- 关于缓冲区的函数:1、Flush:
- 刷新输出缓冲区操作flush & ends & endl
- 关闭activity之前的所有activity,好方法
- [.Net疑难杂症]远程主机关闭了连接错误,Flush()或End()方法导致的错误解决方案
- 远程主机关闭了连接错误,Flush()或End()方法导致的
- c++关闭输出缓冲区
- 在一个方法调用之前保证另一个方法已经执行
- 多线程还是多进程
- 图
- 关于VC操作Excel(解决 mircoSoft jet 数据库引擎找不到对象……)
- 结构体长度
- C++多线程内存管理
- 关闭缓冲区之前,务必调用flush()方法
- Linux 2.6.36以后file_operations和DECLARE_MUTEX 和kmem_cache_create的变化
- 中兴笔试题-1
- Hibernate的检索方式(一)
- SAP PP 中关于计划订单和生产订单的日期计算
- 中兴笔试题-2
- java的SAX库实现XML文件的解析
- 于RIA Flex Flash 平台开发的进销存企业信息管理系统开发经验
- 抽象类与接口的区别及应用