2013-07-27 18 views
6

Mi piacerebbe sapere se FileWriter è o meno bufferizzato.FileWriter vs BufferedWriter

In this SO domanda, sembra che sia però in this domanda SO sembra che non lo è. (Sarebbe una chiamata di sistema per ogni tempo di scrittura (..) viene chiamato.

Quindi, in pratica . leggendo quei due Q & aI sono un po 'confuso C'è qualcuno in grado di spiegare chiaramente fuori

Grazie in anticipo

EDIT:?. Problema risolto con la lettura this API di cui sto citando il parte rilevante:

Ciascuna invocazione di un metodo di scrittura() fa sì che il convertitore codifica essere richiamato sul carattere dato (s). I byte risultanti sono accumulati in un buffer prima di essere scritti nello stream dell'output sottostante. La dimensione di questo buffer può essere specificata, ma per impostazione predefinita è abbastanza grande per la maggior parte degli scopi. Si noti che i caratteri passati ai metodi write() non sono memorizzati nel buffer.

Per la massima efficienza, prendere in considerazione la possibilità di avvolgere un OutputStreamWriter all'interno di un BufferedWriter in modo da evitare frequenti richiami di convertitori. Per esempio :

Writer out = new BufferedWriter (nuovo OutputStreamWriter (System.out));

Poiché FileWriter estende OutputStreamWriter, si applica anche a esso.

Grazie per il tuo tempo però, sono consapevole di aver chiesto qualcosa di abbastanza specifico.

risposta

0

FileWriter non è tamponata, è necessario utilizzare un BufferedWriter come un wrapper:

final int myBufferSize = 2048; 

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize); 
+0

E la dimensione del buffer di default? – Rollerball

0

vorrei caldamente di utilizzare sempre un BufferedWriter. Ti permette di controllare la dimensione effettiva del buffer e puoi garantire che indipendentemente dalla JVM che utilizzi, IO verrà memorizzato nel buffer che porta un enorme incremento delle prestazioni di IO.

+0

Ok ma per quanto riguarda FileWriter è Buffered? Ha solo questo famoso buffer di byte standard? Come funziona? è la JVM che la gestisce? – Rollerball

+0

Un aspetto nel codice JDK 1.7 mostrava un writeBuffer nella Baseclass di Writer. Quindi tutti gli scrittori hanno questo buffer. BufferedWriter utilizza un secondo buffer char cb []; Questo porta alla conclusione che questo buffer nascosto potrebbe non essere parte di tutte le implementazioni JDK (che dire di Android?) – morpheus05

+1

No. Il metodo di scrittura è sovrascritto in OutputStreamWriter. Il buffering sta accadendo nel StreamEncoder utilizzato da OutputStreamWriter, che codifica i caratteri in byte. –

Problemi correlati