2012-03-29 12 views
9

Ho alcuni codici come questo:Come usare flush() per PrintWriter

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(); 

è la flush() in ogni 'per' dichiarazione necessariamente? Ho sentito che flush() si richiamerebbe automaticamente quando si invoca close(). Se scrivo codice come questo:

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

e non vorrei scrivere pw.flush() più? Grazie.

risposta

17

flush() è probabilmente non richiesto nel tuo esempio.

Quello che fa è assicurarsi che qualsiasi cosa scritta dallo scrittore prima della chiamata a flush() sia scritta nello stream sottostante, piuttosto che sedersi in un buffer interno.

Il metodo viene in aiuto in vari tipi di circostanze:

  1. Se un altro processo (o filo) deve esaminare il file mentre è in corso la scrittura, ed è importante che l'altro processo vede tutto il scritture recenti.

  2. Se il processo di scrittura potrebbe bloccarsi ed è importante che nessuna scrittura sul file venga persa.

  3. Se stai scrivendo sulla console, e devi assicurarti che tutti i messaggi vengano mostrati non appena viene scritto.

+0

Un altro titolo di domanda che ha ben poco a che fare con la domanda, ma ha quasi 5K di visualizzazioni –

0

La seconda opzione è preferibile, poiché creerà un oggetto PrintWriter autofilorabile. E se si utilizza il primo caso, allora non credo che flush() sia richiesto nel tuo caso di esempio.