2013-10-04 7 views
1

Может кто-нибудь объяснить, почему мы будем использовать system.out.flush() проще? Если есть вероятность потерять данные, пожалуйста, предоставьте мне пример. Если вы прокомментируете это в коде ниже, ничего не изменится!Почему мы используем 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); 

    } 
    } 
} 

Спасибо

+0

Некоторые методы 'PrintStream' по умолчанию не' flush'. –

+1

http://stackoverflow.com/questions/7166328/when-why-to-call-system-out-flush-in-java – DT7

ответ

7

Когда вы записываете данные в поток, происходит некоторое количество буферизации, и вы точно не знаете точно, когда будет отправлено последнее из данных. Вы можете выполнить много операций в потоке, прежде чем закрывать его, а вызов метода flush() гарантирует, что последний из данных, которые, как вы думали, вы уже написали, фактически выйдет в файл.

Экстракт от Sun Certified Programmer for Java 6 Exam by Sierra & Bates.

В вашем примере это ничего не меняет, потому что System.out выполняет автоматическое смывание, означающее, что каждый раз, когда байт написан в буфере, он автоматически очищается.

+2

Не на всех платформах. В большинстве случаев он очищается от (зависящей от платформы) новой строки. –

2

используется System.out.flush() для записи любых данных, хранящихся в буфере из. Буферы сохраняют текст до точки, а затем записываются при заполнении. Если вы завершаете программу без очистки буфера, вы можете потерять данные.

Смежные вопросы