Vor kurzem lernte ich IO -Streams und stellte fest, dass jedes Mal die Funktion Flush () erscheint. Ich habe seine Funktion überprüft und die Hauptfunktionen sind wie folgt
// »~ ~ ——— ~ ——— ~ ——— ~ up. - - - - - - - - - ————— ~ up up. - - - - - - - - - - - - - - - - - - - - - - - - - -
Allgemeine und falsche Antwort:
Die Daten im Puffer werden gespeichert, bis der Puffer voll ist. Sie können auch die Flush -Methode verwenden, um die Daten im Puffer zu erzwingen, um ausgeschrieben zu werden, oder die Methode Close () verwenden, um den Stream zu schließen. Vor dem Schließen des Streams schreibt der Pufferausgangsstrom die Pufferdaten gleichzeitig aus. Flash () und Close () erzwingen die Daten, die ausgeschrieben werden sollen, sodass die beiden Ergebnisse gleich sind. Wenn Sie es nicht schreiben, werden Sie feststellen, dass Sie es nicht erfolgreich ausschreiben können.
Als Antwort auf die obige Antwort wurde eine genaue Antwort gegeben
FileOutputStream erbt OutputStream und bietet keine Umschreibung der Flush () -Methode. Egal wie viel Inhalt schreiben, er wird den Binärstrom direkt an die I/A des zugrunde liegenden Betriebssystems übergeben. Flush hat keine Wirkung. Die Eingangs- und Ausgangsstromfunktionen der gepufferten Serie sind aus dem Wort gepuffert, dass sie Puffer verwenden. Die Anwendung muss jedes Mal mit dem Gerät kommunizieren, wenn IO, was sehr niedrig ist. Um die Effizienz zu verbessern, wird der Puffer daher beim Schreiben auf das Gerät zuerst in den Puffer geschrieben. Wenn der Puffer über genügend Daten verfügt, wird er auf das gesamte Gerät geschrieben.
Verwenden Sie BufferedxxxStream. Die Standardpuffergröße beträgt 8K. Beim Lesen wird der Puffer ständig ausgefüllt (oder die Datei wird gelesen). Beim Schreiben wird der Inhalt nach dem vollständigen (oder Flush -Betrieb) an den Kernel -Puffer gesendet. Der Grund für eine hohe Effizienz ist es, für jedes Lesen des Byte in den Kernel des Betriebssystems zu fallen (dies ist ein zeitaufwändiger Betrieb). Für einen bestimmten Code prüfen Sie bitte die API selbst.
Ich werde auch eine Frage -Antwort von Baidu anhängen.
Flush () bedeutet, den Inhalt des Puffers zu erzwingen, das ausgeschrieben werden soll. Aufgrund bestimmter Mechanismen des Betriebssystems gibt es ein Konzept des verzögerten Schreibens, um das Lesen und Schreiben von kontinuierlichem Scheiben zu verhindern. (Achten Sie darauf, nicht mit Fruit () Aktualisierung verwechselt zu werden), es wird hauptsächlich in IO verwendet, dh die Pufferdaten. Im Allgemeinen werden beim Lesen und Schreiben von Streams zuerst die Daten in den Speicher gelesen und dann in eine Datei geschrieben. Wenn Sie die Daten lesen, bedeutet dies nicht, dass Ihre Daten geschrieben wurden, da es noch einen Teil davon gibt, der möglicherweise im Speicherpuffer übrig bleibt. Wenn Sie zu diesem Zeitpunkt die Methode close () zum Schließen des Lese- und Schreibstreams aufrufen, geht dieser Teil der Daten verloren. .
Gleiches gilt für einen Netzwerk -Webserver. Um zu verhindern, dass eine Nachricht nach dem Schreiben eines Byte gesendet wird, gibt es ein Konzept eines Puffers, z.
Die Flush -Methode wird im Allgemeinen ausgeführt, wenn das Programm abgeschlossen ist. Folgen Sie dann der Schließenmethode. Zum Beispiel:
// Erhalten Sie den Ausgabestream. Natürlich hängt es von der spezifischen Umgebung ab. Printwriter out = util.getWriter (); out.println ("einige Informationen ausgeben, vielleicht viel"); out.flush (); out.close ();Einfach ausgedrückt, die Flush () -Methode besteht darin, alle im Speicher gespeicherten Inhalte auszugeben (Stapelausgabe). Normalerweise wird beispielsweise ein typisches Beispiel in der Filewriter -Klasse verwendet. Neben der Verwendung von Flush Output wird der endgültige Aufruf der Schließmethode auch die Batch -Ausgabe sein.
Importieren Sie Java.io.FileWriter; import Java.io.ioxception; public class a04 {public static void main (String args []) {Filewriter fw; try {fw = new Filewriter ("c: //try.txt"); fw.write ("hello"); // fw.close (); // Dieser Satz wird nicht hinzugefügt, die Datei kann nicht geschrieben werden und die Datei ist leer! System.out.println ("ok"); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }}}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die Rolle und Verwendungsmethoden der Flush -Funktionen in der Java -Sprache. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!