黑马程序员技术交流社区

标题: 问一个流的问题 [打印本页]

作者: 盖保宁    时间: 2011-9-26 10:54
标题: 问一个流的问题
问一下关于流中的  .flush()到底有什么用,看到很多解释,但是自己在程序去掉它并不影响结果啊,大家能给一个典型的例子吗,有没有到底有什么区别?  求解释
作者: 匿名    时间: 2011-9-26 12:30
刷新此流。如果此流已保存缓冲区中各种 write() 方法的任何字符,则立即将它们写入预期目标。然后,如果该目标是另一个字符或字节流,则将其刷新。因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区
简单点理解就是:用到缓冲区的话就应该时刻注意刷新缓冲区内的数据,否则内存清空的时候会丢失数据
作者: 匿名    时间: 2011-9-26 12:39
flush(); 方法是将内存中的数据一次性输出!在你没规定内存中数据达到多少时,调用.flush()方法,就默认是关闭流时,一次性全部输出!你读入的数据都放在内存中,当内存放不下时就会报异常,关闭流时,一次性把内存中的数据都输出出去!
    PrintWriter中就有这个方法,但必须规定一个整数,当数据够了整数个以后.flush()方法就输出
作者: 匿名    时间: 2011-9-26 13:05
flush()方法是输出流的一个方法,作用是强制清空缓冲区,并将缓冲区的数据写入外设.
为了减少和输出设备的交互次数,提高输出效率,java提供了具有缓冲区的子类,对于具备缓冲功能的子类,write()方法所写的数据并没有直接传输到相连的外设上,而是暂时存放在流的缓冲区,等到缓冲区中数据积累到一定程度时,才统一执行一次向外设的写操作,把所缓冲的数据全部写到外设中.但是在某种情况下,缓冲区的数据并未满就需要将其写到外设中,此时就应用flush()方法强制清空缓冲区,并将缓冲区的数据写入外设
作者: 梁锡伟    时间: 2011-9-26 14:03
你去掉它不影响结果的原因是有些类的close里面
作者: 梁锡伟    时间: 2011-9-26 14:06
你去掉它不影响结果的原因是有些类的close里面调用了它,但有些没有,所以flush是public而不是private.
作者: 匿名    时间: 2011-9-26 16:44
标题: 回复 报纸 的帖子
原来如此,我的确 是跟着close一起用的
作者: 匿名    时间: 2011-9-26 18:13
Flush() 是清空,而不是刷新
主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 Close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先Flush(),先清空数据。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2