2013-07-27 6 views
6

Ich möchte wissen, ob FileWriter gepuffert ist oder nicht.FileWriter vs BufferedWriter

In this SO Frage, so scheint es, dass es jedoch in this SO Frage scheint es, dass es nicht. (Es wäre für jedes Mal, Schreib ein Systemaufruf sein (..) wird aufgerufen.

Also im Grunde . die beide Q & AI ist ein wenig verwirrt zu lesen, ist jemand in der Lage, um es klar zu erklären aus

Vielen Dank im Voraus

EDIT:. Problem gelöst durch das Lese this API von denen ich zitiere die relevanter Teil:

Jeder Aufruf einer Methode write() bewirkt, dass der Codierung Wandler auf dem gegebene Zeichen aufgerufen werden (s). Die resultierenden Bytes sind akkumuliert in einem Puffer vor dem Schreiben in die zugrunde liegende Ausgabe Stream. Die Größe dieses Puffers kann angegeben werden, aber standardmäßig ist er groß genug für die meisten Zwecke. Beachten Sie, dass die an die write() - Methoden übergebenen Zeichen nicht zwischengespeichert werden.

Um höchste Effizienz zu erzielen, sollten Sie einen OutputStreamWriter innerhalb eines BufferedWriter einschließen, um häufige Konverteraufrufe zu vermeiden. Für Beispiel:

Writer out = new BufferedWriter (neu Output (System.out));

Da FileWriter OutputStreamWriter erweitert, gilt dies auch für FileWriter. obwohl

Vielen Dank für Ihre Zeit, ich bin mir bewusst, ich etwas ganz spezifisch gefragt.

Antwort

0

FileWriter nicht gepuffert ist, haben Sie eine BufferedWriter als Wrapper verwenden:

final int myBufferSize = 2048; 

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

Was ist mit der Standard-Puffergröße? – Rollerball

0

Ich würde recomand immer eine BufferedWriter zu verwenden. Es erlaubt Ihnen, die tatsächliche Puffergröße zu kontrollieren und Sie können garantieren, dass unabhängig von der JVM, die Sie verwenden, IO gepuffert wird, was eine enorme Steigerung der IO-Leistung bringt.

+0

Ok, aber was ist mit FileWriter ist es gepuffert? Es hat nur diesen berühmten Standard-Byte-Puffer? Wie funktioniert es? ist die JVM, die es handhabt? – Rollerball

+0

Ein Blick in den JDK 1.7 Code zeigte einen WriteBuffer in der Writer Baseclass. Also haben alle Schreiber diesen Puffer. Der BufferedWriter verwendet einen zweiten Puffer private char cb []; Dies führt zu der Schlussfolgerung, dass dieser versteckte Puffer möglicherweise nicht Teil aller JDK-Implementierungen ist (was ist mit Android?) – morpheus05

+1

Nein. Die Schreibmethode wird in OutputStreamWriter überschrieben. Die Pufferung findet im von OutputStreamWriter verwendeten StreamEncoder statt, der Zeichen in Bytes codiert. –