Flush in java.io.FileWriter
Ich habe eine Frage in meinem Kopf, dass beim schreiben in die Datei vor dem schließen geschehen ist, sollten wir enthalten flush()??. Wenn ja, was wird es genau? dont streams auto-flush??
EDIT:
So bündig, was es eigentlich tun?
InformationsquelleAutor der Frage i2ijeya | 2009-11-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Writers und streams in der Regel einige Puffer in Ihrer Ausgabe von Daten in den Speicher und versuchen, es zu schreiben, in größeren Blöcken zu einer Zeit. die Spülung bewirkt eine unmittelbare schreiben auf die Festplatte aus dem Puffer, so dass, wenn das Programm stürzt ab, Daten gehen nicht verloren. Natürlich gibt es keine Garantie, da die Festplatte nicht physisch schreiben Sie die Daten sofort, also es könnte noch verloren werden. Aber dann wäre es nicht das Java-Programm Schuld 🙂
PrintWriters auto-flush (standardmäßig) beim schreiben einer end-of-line, und natürlich streams und Puffer Spülen, wenn Sie Sie schließen. Andere als das, es gibt eine Spülung nur, wenn der Puffer voll ist.
InformationsquelleAutor der Antwort Carl Smotricz
Ich würde empfehlen, aufrufen, flush, bevor Sie schließen. Im Grunde, schreibt es die Verbleibende bufferized Daten in die Datei.
Wenn Sie anrufen
flush
explizit können Sie sicher sein, dass jedeIOException
ausclose
ist wirklich katastrophal und in Bezug auf die Freigabe von system-Ressourcen.Wenn Sie
flush
sich selbst, können Sie behandeln IhreIOException
in der gleichen Weise, wie Sie mit Ihren Daten umgehen schreiben Ausnahmen.InformationsquelleAutor der Antwort Alexander Pogrebnyak
Brauchen Sie nicht zu tun, einen flush, weil close() wird es für Sie tun.
Aus der javadoc:
"Den stream schließen, Spülen Sie es zuerst. Sobald ein stream geschlossen wurde, weiter schreiben() oder flush () - Aufrufe verursachen eine IOException geworfen werden. Das schließen eines zuvor geschlossenen stream, hat jedoch keine Wirkung."
InformationsquelleAutor der Antwort Benj
Ihre Frage zu beantworten, was flush eigentlich nicht, es macht Sie sicher, dass alles, was Sie geschrieben haben, um die stream - Datei-in deinem Fall - tatsächlich geschrieben, um die Datei dort und dann.
Java ausführen kann, Pufferung, was bedeutet, dass es halten wird auf die Daten im Speicher geschrieben, bis es einen gewissen Betrag, und dann schreiben Sie es alle, um die Datei in einem Rutsch, welche effizienter ist. Der Nachteil dieser Lösung ist, dass die Datei nicht unbedingt up-to-date zu jeder Zeit. Flush ist eine Art zu sagen: "machen Sie die Datei up-to-date.
In der Nähe Anrufe flush first, um sicherzustellen, dass nach dem schließen der Datei ist, was Sie erwarten würden, um zu sehen, in der it, daher, wie andere haben darauf hingewiesen, keine Notwendigkeit zu Spülen, bevor Sie schließen.
InformationsquelleAutor der Antwort user15299
Schließen automatisch leert. Sie brauchen nicht, es zu nennen.
InformationsquelleAutor der Antwort Ry4an Brase
Es gibt keinen Punkt im Aufruf von flush() nur vor einem close(), wie schon andere gesagt haben. Die Zeit für die Nutzung von flush() ist, wenn Sie halten die Datei öffnen, aber wollen, um sicherzustellen, dass die bisherige schreibt, wurden vollständig abgeschlossen.
InformationsquelleAutor der Antwort Dave Costa
Wie gesagt, Sie müssen sich für gewöhnlich nicht zu Spülen.
Macht es nur Sinn, wenn aus irgendeinem Grund, Sie wollen einen anderen Prozess zu sehen, den kompletten Inhalt einer Datei mit der Sie arbeiten, ohne es zu schließen. Zum Beispiel könnte es sein, verwendet für eine Datei, die gleichzeitig modifiziert durch mehrere Prozesse, wenn auch mit sehr VIEL Pflege 🙂
InformationsquelleAutor der Antwort Federico Giorgi
FileWriter
ist eine böse Klasse als es aufnimmt, was Zeichensatz passiert, dort zu sein, anstatt eine explizite charset. Sogar, wenn Sie wollen, der Standard, explizit über.Die übliche Lösung ist
OutputStreamWriter
undFileOutputStream
. Es ist möglich, für den Dekorateur, um eine exception zu werfen. Daher müssen Sie in der Lage sein, um den stream schließen, auch wenn der Schriftsteller wurde nie gebaut. Wenn Sie das tun, müssen Sie nur bündig der Autor (im glücklichen Fall) und immer den stream schließen. (Nur zu verwirrend sein, einige Dekorateure, zum Beispiel für das handling von Reißverschlüssen, haben die Ressourcen, die das benötigen schließen.)InformationsquelleAutor der Antwort Tom Hawtin - tackline
Anderen Anwendungsfall für die Spülung im Programm ist zu schreiben Fortschritt der longrunning-job in die Datei (so kann es beendet und später neu gestartet. Sie wollen sicher sein, dass die Daten sicher auf der Festplatte.
InformationsquelleAutor der Antwort Vojtech Salbaba