A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盖保宁 黑马帝   /  2011-9-26 10:54  /  1970 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问一下关于流中的  .flush()到底有什么用,看到很多解释,但是自己在程序去掉它并不影响结果啊,大家能给一个典型的例子吗,有没有到底有什么区别?  求解释

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-9-26 12:30:24
沙发
刷新此流。如果此流已保存缓冲区中各种 write() 方法的任何字符,则立即将它们写入预期目标。然后,如果该目标是另一个字符或字节流,则将其刷新。因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区
简单点理解就是:用到缓冲区的话就应该时刻注意刷新缓冲区内的数据,否则内存清空的时候会丢失数据

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 12:39:44
藤椅
flush(); 方法是将内存中的数据一次性输出!在你没规定内存中数据达到多少时,调用.flush()方法,就默认是关闭流时,一次性全部输出!你读入的数据都放在内存中,当内存放不下时就会报异常,关闭流时,一次性把内存中的数据都输出出去!
    PrintWriter中就有这个方法,但必须规定一个整数,当数据够了整数个以后.flush()方法就输出

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 13:05:07
板凳
flush()方法是输出流的一个方法,作用是强制清空缓冲区,并将缓冲区的数据写入外设.
为了减少和输出设备的交互次数,提高输出效率,java提供了具有缓冲区的子类,对于具备缓冲功能的子类,write()方法所写的数据并没有直接传输到相连的外设上,而是暂时存放在流的缓冲区,等到缓冲区中数据积累到一定程度时,才统一执行一次向外设的写操作,把所缓冲的数据全部写到外设中.但是在某种情况下,缓冲区的数据并未满就需要将其写到外设中,此时就应用flush()方法强制清空缓冲区,并将缓冲区的数据写入外设

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
你去掉它不影响结果的原因是有些类的close里面
回复 使用道具 举报
你去掉它不影响结果的原因是有些类的close里面调用了它,但有些没有,所以flush是public而不是private.

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 画龙点睛啊!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 16:44:49
7#

回复 报纸 的帖子

原来如此,我的确 是跟着close一起用的
回复 使用道具 举报
黑马网友  发表于 2011-9-26 18:13:45
8#
Flush() 是清空,而不是刷新
主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 Close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先Flush(),先清空数据。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马