I/O中的flush方法  什么时候用?具体的 
必须用吗?  或者什么时候必须用?谢谢了~

解决方案 »

  1.   

    这么讲,你向某个OutputStream发送完数据,希望得到对方的反馈,那么就flush吧。
    虽然部分实现可以自动flush,但我还是建议你每次发送完数据,都flush一下,避免忘记了程序出问题
      

  2.   

    如果你用的流是有buffer的,那末就要用
    如果不是带buffer的流,就没有必要用
      

  3.   

    因为有的流是带有缓冲区的,比如buffer流就是个带缓冲区的流,如果你要output,那么先将这个缓冲区存满数据然后再一起输出,你想想看,当你那个缓冲区满了,但是还没来得及输出的时候,你这时候关掉了流(xx。close()),那么那个缓冲区中的数据将无法输出啊!!!,所以好的习惯是在xx.close()之前调用xx.flush() 也就是把缓冲区中的数据全部输出,然后再调用xx.close(),关闭流!
      

  4.   

    刚因为这个出现问题,应该是带buffer的都带吧。
    为了安全,还是所有的都flush一下吧。
      

  5.   

    一般来说,对于有buffer的流,在close方法里都会进行flush。所以,关闭之前不进行flush也是可以的。但关闭之前进行显式的flush是好的习惯。
    有的时候,比如用户从web上点击某个按钮,你要进行一个长时间的工作,为了让用户知道服务器在工作(而不是死机了),你需要向页面上写一些message。但是由于通常Web服务器都有缓冲策略,要等到向页面输出的内容达到一定的长度以后才向浏览器发送数据,所以你的message被缓存了,没有及时反映到用户的浏览器上。这种情况下,你就需要每输出一个message做一次flush。从而保证你的message打印到页面上。
    Java提供的流中,名字里带buffered的好像都是带缓冲的流。
      

  6.   

    public void flush()
    意思是清空输出流,即将任何被缓冲输出的字节立即发送到输出流中
      

  7.   

    这个问题你如果想看标准的答案,自己去看api好了。老实说,楼上有的说法不精确,评自己的感觉。
    Fileoutputstream难道就不需要flush吗?并不是一定要带有buffer的流才用到flush。
      

  8.   

    我一般是关流之前先flush一下。纯属个人使用习惯,不代表官方意见。
      

  9.   

    只有缓冲的输出流具有的特点write()  数据从 源---->缓冲区
    flush()    数据从 缓冲区----->磁盘
    close()    关闭,并且缓冲区---->磁盘
    如果只write
    不flush也不close就写不到磁盘上
      

  10.   

    刷新此流。如果此流已保存缓冲区中各种 write() 方法的任何字符,则立即将它们写入预期目标。然后,如果该目标是另一个字符或字节流,则将其刷新。因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区。 
    如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。