Frage

Ich habe eine Frage in meinem Kopf, dass, während sie in die Datei zu schreiben, vor der Schließung erfolgt, sollten wir bündig include () ??. Wenn ja, was es genau tun? Dont Ströme Auto Flush ?? EDIT:

So bündig, was es eigentlich tun?

War es hilfreich?

Lösung

Schriftsteller und in der Regel Strom einige Ihrer Ausgangsdaten in Pufferspeicher und versuchen Sie es zu einem Zeitpunkt, in größeren Blöcken zu schreiben. Spülung wird sofort schreiben auf der Festplatte aus dem Puffer verursachen, so dass, wenn das Programm stürzt ab, dass die Daten nicht verloren gehen. Natürlich gibt es keine Garantie, da die Festplatte die Daten physisch nicht sofort schreiben kann, so dass es immer noch verloren gehen könnte. Aber dann wäre es nicht das Java-Programm schuld sein:)

PrintWriters Auto-Flush (Standardeinstellung), wenn Sie eine End-of-line schreiben, und natürlich Ströme und Puffer bündig, wenn Sie sie schließen. Other than that, es gibt Spülung nur dann, wenn der Puffer voll ist.

Andere Tipps

Ich würde empfehlen, bündig vor der Nähe zu rufen. Grundsätzlich schreibt es bufferized Daten in der Datei zu bleiben.

Wenn Sie flush nennen explizit können Sie sicher sein, dass jede IOException von close herauskommt ist wirklich katastrophal und die dazugehörigen Systemressourcen freizugeben.

Wenn Sie flush selbst, können Sie seine IOException in der gleichen Art und Weise behandeln, wie Sie Ihre Datenschreib Ausnahmen zu behandeln.

Sie brauchen nicht einen Flush zu tun, weil close () wird es für Sie tun.

Von der javadoc:

„um den Strom schließen, ist es zunächst gespült wird. Sobald ein Strom geschlossen wurde, weiter write () oder flush () Anrufungen wird eine IOException verursachen geworfen werden. Schließen eines zuvor geschlossenen Strom, jedoch keine Wirkung.“

Zur Beantwortung Ihrer Frage, was bündig tatsächlich der Fall ist, es stellt sicher, dass alles, was Sie in den Stream geschrieben haben - eine Datei in Ihrem Fall - Bekommt tatsächlich in die Datei geschrieben und Stelle.

Java kann Pufferung, welche Mittel führen, dass sie auf Daten geschrieben im Speicher halten, bis sie eine bestimmte Menge hat, und schreibt sie dann alle in die Datei in einem Rutsch, die effizienter ist. Die Kehrseite der Medaille ist, dass die Datei zu einem bestimmten Zeitpunkt nicht unbedingt up-to-date ist. Flush ist eine Art zu sagen „, um die Datei machen up-to-date.

Schließen Anrufe bündig erste, um sicherzustellen, dass nach dem Schließen der Datei hat, was Sie darin zu sehen erwarten würde, also wie andere haben darauf hingewiesen, keine Notwendigkeit, bündig vor der Schließung.

Schließen automatisch leert. Sie brauchen nicht zu nennen.

Es gibt keinen Grund in Aufrufen flush () kurz vor dem Ende (), wie andere gesagt haben. Die Zeit bis zur Verwendung flush (), wenn Sie die Datei geöffnet halten, sondern wollen sicherstellen, dass die frühere Schreiben vollständig abgeschlossen ist.

Wie gesagt, Sie haben in der Regel nicht zu spülen müssen.

Es macht nur Sinn, wenn aus irgendeinem Grund, möchten Sie ein anderer Prozess den gesamten Inhalt einer Datei mit dem Sie arbeiten, um zu sehen, ohne es zu schließen. Zum Beispiel könnte es für eine Datei verwendet werden, die gleichzeitig von mehreren Verfahren modifiziert wird, wenn auch mit vieler Sorgfalt: -)

FileWriter ist ein Übel Klasse, wie es nimmt, was Zeichensatz nach oben geschieht, dort zu sein, anstatt einen expliziten charset nehmen. Selbst wenn Sie den Standard wollen, um es explizit sein.

Die übliche Lösung ist OutputStreamWriter und FileOutputStream. Es ist möglich, dass der Dekorateur eine Ausnahme zu werfen. Daher müssen Sie in der Lage sein, den Strom zu schließen, auch wenn der Schriftsteller nie gebaut wurde. Wenn Sie das tun werden, müssen Sie nur den Schriftsteller (in dem glücklichen Fall) spülen, und immer in der Nähe des Stroms. (Just zu verwirrend sein, einige Dekorateure, zum Beispiel für Reißverschlüsse Umgang haben Ressourcen, die sie benötigen zu schließen.)

Ein weiteres usecase für in Programm Spülung schreiben Fortschritte Job in der Datei von longrunning (so kann er später gestoppt und wieder gestartet werden. Sie wollen sicher sein, dass die Daten sicher auf dem Laufwerk.

while (true) {
  computeStuff();
  progresss += 1;
  out.write(String.format("%d", progress));
  out.flush();
}
out.close();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top