flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。比如,在你的程序中,System.out.flush();可以保证在执行到s=br.readLine();之前,System.out.print("输入一个字符串:");一定已经得以执行了。也就是说屏幕上肯定会出现“输入一个字符串:”这句话。

解决方案 »

  1.   

    输入输出流一般都是用缓冲的,也就是说不是每次你要它读/写一个或少数几个字节,他就立马执行的,而是将这些请求放入缓冲,积累到一定量的时候才一起执行,以提高效率。
    flush的作用就是强制将缓冲区里的东西立刻执行然后清空,不管里面有多少东西。
      

  2.   

    Flush the stream. This is done by writing any buffered output bytes to the underlying output stream and then flushing that stream. 
      

  3.   

    如果把System.out.flush();这条语句去掉上面的程序的执行结果会有什么不一样吗?换句话说,什么场合下,必须要System.out.flush()?
      

  4.   

    你如果去Java API里察看 System.out的类型,发现是PrintStream 
    PrintStream 有一个flush()函数(或叫方法),所以你可以使用 System.out.flush()因为在实际应用中,PrintStream可能被包装成不同的类使用,因此输出流在不同的应用中是将数据输送到不同的地方去的。 在System.out中,此输出流是将数据输出到屏幕上,因此,速度很快,不需要缓冲,因此,用或不用System.out.flush() 没有什么区别。但如果另外一个输出流是把数据输送到网络上另外一台机器上,传输受到网络的限制,尚未发送的数据被存在缓冲区里,这时你调用flush()就可以确保缓冲区的数据全部被发送后再执行后面的语句。
      

  5.   

    to: umeshu(一只批着狼皮的羊)   照你那么说,如果没有System.out.flush();这句话,那么“输入一个字符串:”就不一定会输出了??如果,没有System.out.flush();,结果有什么不同吗 ?
      

  6.   

    是的。或者说,jvm不保证一定会输出“输入一个字符串:”。可实际上,在楼主这种情形下,出现不输出的情况的概率几乎为O。呵呵。