# Nur aus Interesse: Warum verwendet man FileWriter.flush()?



## Don83 (12. Dez 2013)

Hallo,

nur aus Interesse:
wenn ich Daten schreibe schließe ich den FileWriter mit FileWriter.flush() gefolgt von FileWriter.close().
Warum reicht es nicht FileWriter.close() zu verwenden. Es macht mich verrückt, dass ich nur aus Gewohntheit Code verwende den ich nicht verstehe . Also kann mich jemand aufklären, warum das flush notwendig ist?


----------



## rme (12. Dez 2013)

Ist nicht nötig, da close bereits flush aufruft. Aus der JavaDoc von close: "Closes the stream, flushing it first."

Flush braucht man nur, falls man Sachen schreiben will und sie in der Datei auftauchen sollen, bevor man sie schließt, z.B. bei Log-Dateien oder so, die immer geöffnet bleiben.


----------



## turtle (12. Dez 2013)

> Also kann mich jemand aufklären, warum das flush notwendig ist?



Also wirklich NOTWENDIG ist dies nicht, denn...

Ein flush() sagt dem Betriebssystem (OS), das es die letzten Bytes auch wirklich auf "Platte" schreiben soll. Normalerweise weisst du ja nicht, wann die geänderten Bytes wirklich in der Datei landen, da das OS das so macht, wie es für richtig hält. Oft sagt es beim Schreiben sofort, alles Ok, aber in Wirklichkeit wurden nur die Bytes in einem temporären Puffer geschrieben und irgendwann später, schreibt das OS die geänderten Puffer wirklich auf Platte. Wenn du aber sicherstellen möchtest, das das OS die Platte "bemühen" soll dient der flush()-Befehl.

Aber..
Wird eine Datei geschlossen, ruft das OS automatisch vorher in flush() auf, damit geänderte Daten auch wirklich auf Platte stehen. 

Also ist das flush vor einem close in der Regel überflüssig

Aber nochmal Aber..
Wie du siehst sind wir hier nahe am OS und aus Java-Sicht wissen wir nicht, ob das OS auf dem die JVM läuft, dies genauso handhabt wie hier beschrieben wurde. Daher, um absolut sicher zu sein, baut man flush trotzdem wieder ein.

Klar, soweit? Parley


----------



## Don83 (12. Dez 2013)

> Aber nochmal Aber..
> Wie du siehst sind wir hier nahe am OS und aus Java-Sicht wissen wir nicht, ob das OS auf dem die JVM läuft, dies genauso handhabt wie hier beschrieben wurde. Daher, um absolut sicher zu sein, baut man flush trotzdem wieder ein.



Ok also quasi nur eine Sicherheitsmaßnahme . Alles klar und vielen Dank für die Aufklärung.


----------



## rme (12. Dez 2013)

Das stimmt nicht so ganz - siehe mein Zitat aus den JavaDocs. Der Java-Code von close() ruft flush() wirklich explizit auf, man muss es daher nicht verwenden, wenn man close() aufruft.


----------

