Antworten:
Aus den Dokumenten der flush
Methode:
Leert den Ausgabestream und erzwingt das Ausschreiben aller gepufferten Ausgabebytes. Der allgemeine Vertrag von Flush ist, dass das Aufrufen ein Hinweis darauf ist, dass, wenn zuvor geschriebene Bytes durch die Implementierung des Ausgabestreams gepuffert wurden, diese Bytes sofort an ihr beabsichtigtes Ziel geschrieben werden sollten.
Die Pufferung erfolgt hauptsächlich zur Verbesserung der E / A-Leistung. Weitere Informationen hierzu finden Sie in diesem Artikel: Optimieren der Java-E / A-Leistung .
Wenn wir einen Befehl erteilen, werden die Streams dieses Befehls in dem Speicher gespeichert, der als Puffer (ein temporärer Speicherort) auf unserem Computer bezeichnet wird. Wenn der gesamte temporäre Speicherplatz voll ist, verwenden wir flush (), das alle Datenströme löscht und vollständig ausführt und neuen Streams im temporären Speicherort des Puffers neuen Speicherplatz gibt. -Hoffentlich wirst du verstehen
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
und die PrintXXX
Klassen. Die flush()
Methode eines anderen Streams oder Writer
tut nichts.
flush()
explizites Aufrufen ist für a nicht erforderlich BufferedWriter
, solange Sie close()
der Autor sind. close()
führt selbst einen Flush aus.
close()
Aufrufe flush()
, sodass das Aufrufen beider Anrufe bei Verwendung FileWriter
ohne Puffer redundant ist .
Wenn Sie Daten in einen Stream schreiben, werden diese nicht sofort geschrieben und gepuffert. Verwenden flush()
Sie diese Option, wenn Sie sicherstellen müssen, dass alle Ihre Daten aus dem Puffer geschrieben sind.
Wir müssen sicherstellen, dass alle Schreibvorgänge abgeschlossen sind, bevor wir den Stream schließen. Deshalb flush()
wird er in Datei- / gepufferten Writern aufgerufen close()
.
Wenn Sie jedoch festlegen müssen, dass alle Ihre Schreibvorgänge jederzeit gespeichert werden, bevor Sie den Stream schließen, verwenden Sie flush()
.
FilterOutputStream
und garantiert FilterWriter
.
Wenn der Puffer voll ist, werden alle darauf gepufferten Zeichenfolgen auf der Festplatte gespeichert. Puffer werden verwendet, um Big Deals zu vermeiden! und Overhead.
In der BufferedWriter-Klasse, die in Java-Bibliotheken platziert ist, gibt es eine Zeile wie:
private static int defaultCharBufferSize = 8192;
Wenn Sie Daten senden möchten, bevor der Puffer voll ist, haben Sie die Kontrolle. Spülen Sie es einfach. Aufrufe von writer.flush () sagen: "Senden Sie jetzt alles, was sich im Puffer befindet!"
Nachschlagewerk: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
Seiten: 453
Auf Streams wird häufig von Threads zugegriffen, die ihren Inhalt regelmäßig leeren und ihn beispielsweise auf dem Bildschirm anzeigen, an einen Socket senden oder in eine Datei schreiben. Dies erfolgt aus Leistungsgründen. Das Leeren eines Ausgabestreams bedeutet, dass Sie anhalten, warten möchten, bis der Inhalt des Streams vollständig an sein Ziel übertragen wurde, und dann die Ausführung mit leerem Stream und gesendetem Inhalt fortsetzen möchten.
Bei Leistungsproblemen müssen die ersten Daten in den Puffer geschrieben werden. Wenn der Puffer voll ist, werden Daten in die Ausgabe geschrieben (Datei, Konsole usw.). Wenn der Puffer teilweise gefüllt ist und Sie ihn an die Ausgabe (Datei, Konsole) senden möchten, müssen Sie die Methode flush () manuell aufrufen, um einen teilweise gefüllten Puffer in die Ausgabe (Datei, Konsole) zu schreiben.