有关于java flush() 的问题,懂的进,谢谢!

importjava.io.*;publicclassTestBufferStream2{publicstaticvoidmain(String[]args){try{B... import java.io.*;
public class TestBufferStream2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\javapro\\java\\dat2.txt"));
BufferedReader br = new BufferedReader(
new FileReader("e:\\javapro\\java\\dat2.txt"));
String s = null;
for(int i=1;i<=10;i++){
s = String.valueOf(Math.random());
bw.write(s);
bw.newLine();

}
bw.flush();
while((s=br.readLine())!=null){
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) { e.printStackTrace();}
}
}
把 bw.flush(); 这句去掉后,该程序仍然能生成dat2.txt文件,文件中也有数据,为什么该文件内容输出不出来呢?
展开
 我来答
dngoryaner
2012-05-08 · TA获得超过2350个赞
知道小有建树答主
回答量:2404
采纳率:0%
帮助的人:1138万
展开全部
你说的是flush()函数吧。
flush() 是把缓冲区的数据强行输出,(注意不要和frush()刷新混淆了)
主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
因为操作系统的某些机制,为了防止一直不停地磁盘读写,所以有了延迟写入的概念。
在网络web服务器上也是,为了防止写一个字节就发送一个消息,所以有缓冲区的概念,比如64K的内存区域,缓冲区写满了再一次性写入磁盘之中(或者发送给客户端浏览器)。
flush方法一般是程序写入完成时执行。随后跟着close方法。例如:
// 取得输出流。当然,看具体环境。
PrintWriter out = Util.getWriter();
out.println("输出一些信息,可能很多");
out.flush();
out.close();
左手编码
2012-05-08 · TA获得超过756个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:351万
展开全部
“将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。”这是BufferedWriter
api的前两句话,意思是:为了防止多次操作IO(操作IO很费cpu时间),提供了一个缓冲区,当缓冲区满的时候,再写入文件,从而提高效率。因此,如果缓冲区没有写满,那么就必须强制他输出到文件,即调用flush();
你问题是:内容只是写到了缓冲区里,并没有写入文件。所以读取不到内容,程序结束后为什么文件里面又有内容呢?因为你在后面调用close()方法了,这个方法调用之前会自动调用flush()。如果你把bw.close(); 也去掉,那么文件里是没有内容的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幽冥神者
2012-05-08 · TA获得超过3213个赞
知道大有可为答主
回答量:1953
采纳率:50%
帮助的人:1789万
展开全部
这种带缓存的IO,每次缓存一部分,缓存满了才写入文件
如果不写flush,在最后一次缓存没满的时候直接关掉IO,最后的那些字节可能写不进去了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
送您回家
2012-05-08
知道答主
回答量:6
采纳率:0%
帮助的人:2.8万
展开全部
bw.flush();是建立一个缓冲区,去掉它就相当于去掉了缓冲区。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式