5

有人可以解释为什么我们会system.out.flush()以更简单的方式使用吗?如果有可能丢失数据,请给我一个例子。如果您在下面的代码中对其进行注释,则不会发生任何变化!

class ReverseApp{
    public static void main(String[] args) throws IOException{
    String input, output;
    while(true){

        System.out.print("Enter a string: ");
        System.out.flush();
        input = getString(); // read a string from kbd
        if( input.equals("") ) // quit if [Enter]
        break;
        // make a Reverser
        Reverser theReverser = new Reverser(input);
        output = theReverser.doRev(); // use it
        System.out.println("Reversed: " + output);

   }
   }
}

谢谢

4

3 回答 3

8

当您将数据写入流时,会发生一定量的缓冲,您永远无法确切知道最后一个数据何时实际发送。您可能会在关闭流之前对流执行许多操作,并且调用 flush() 方法可以确保您认为已经写入的最后一个数据实际上会输出到文件中。

摘自Sierra & Bates 的 Sun Certified Programmer for Java 6 Exam

在您的示例中,它不会更改任何内容,因为System.out执行自动刷新意味着每次在缓冲区中写入一个字节时,它都会自动刷新。

于 2013-10-04T14:40:48.963 回答
3

您使用 System.out.flush() 写入存储在输出缓冲区中的任何数据。缓冲区将文本存储到一个点,然后在满时写入。如果您在不刷新缓冲区的情况下终止程序,则可能会丢失数据。

于 2013-10-04T14:38:00.257 回答
2

这是说文档的内容。

于 2013-10-04T15:23:58.923 回答