java 错误使用BufferedWriter 写txt文件出现文件内容缺失,不同于readline()的阻塞、缓冲区大小设置

先写原因:注意bWriter.flush(),bWriter.close(),bReader.readline()三条语句的顺序。先flush,close,再readline()没问题.
今天写一个用BufferedWriter写txt文件,BufferedReader读txt文件的程序时,运行后,发现txt文件里的内容跟原始的相比,缺失了一大部分,经过一番测试,debug后,还是没能解决问题,简直我勒个去。
根据我写的代码分析
1.一开始查找是不是BufferedReader中的readline()的阻塞问题
被readLine()折腾了一把
还去原文件看了是不是遇到/r或/n或/r/n
2.BufferedWriter或BufferedReader的缓冲区太小了,默认的是8192,修改后还是没解决,如果把缓冲区值变大,会影响运行速度,而且文件过大时,还是会出现内容缺失,文件过小时,干脆整个文件为空。这让我很不解。
3.代码的顺序导致bug。仔细研究了BufferedWriter和BufferedReader的用法后,发现了一个隐藏的
bug:
对1.txt进行了BufferedWriter的write()操作后,紧接着使用了BufferedReader的readline()操作,把从BufferedReader缓冲区中读取的写到2.txt中,就很大可能出现部分内容缺失的问题。
why:
对1.txt进行写操作后,没有进行flush(),或flush()和close()操作就对进行读操作,此时有部分内容还在缓冲区中,没有写进1.txt中,自然,此时在1.txt中读到的内容就不完整,写到2.txt的也是不完整的。
这涉及另一个问题,就是,write(str)不是当有str传过来就会马上写到文件中的,而是先存放在缓冲区中,当缓冲区中有一定数量的字符流或有flush操作后,才会一次性写到文件中。

总结:使用BufferedWriter一定要注意刷新flush,关闭流close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值