2012-03-29 14 views
9

tengo algunos códigos como éste:Cómo usar flush() para PrintStream

PrintWriter pw = new PrintWriter(new BufferedReader(....)); 
for(int i=0; i<10; i++) { 
    pw.println("a"); 
    pw.flush();// flush each time when println()? 
} 
pw.close(); 

es la flush() en cada uno 'de' declaración necesariamente? Escuché que flush() invocaría automáticamente al invocar close(). Si escribo código como este:

PrintWriter pw = new PrintWriter(new BufferedReader(....), true); 

y yo no escribiría pw.flush() más? Gracias.

Respuesta

17

flush() es probablemente no es necesario en su ejemplo.

Lo que hace es asegurarse de que todo lo escrito al escritor antes de llamar a flush() se escribe en el flujo subyacente, en lugar de sentarse en un búfer interno.

El método viene muy bien en varios tipos de circunstancias:

  1. Si otro proceso (o hilo) necesita examinar el archivo mientras está siendo escrito para, y es importante que el otro proceso ve todo el escritos recientes.

  2. Si el proceso de escritura puede fallar, es importante que no se pierda ninguna escritura en el archivo.

  3. Si está escribiendo en la consola, y necesita asegurarse de que cada mensaje se muestre tan pronto como está escrito.

+0

Otro título de pregunta que tiene muy poco que ver con la pregunta, aunque tiene casi 5,000 vistas –

0

La segunda opción es mejor de usar, ya que creará un objeto PrintWriter autoflusible. Y si usa el primer caso, entonces no creo que se requiera flush() en su caso de ejemplo.

Cuestiones relacionadas