Wie der Javadoc sagt, brauchen Sie nicht , um sich zu spülen. Aber es ist immer noch gut zu tun, in Anbetracht Ihrer Leser und gesunden Menschenverstand.
Nur wenige Experten kennen den Javadoc auswendig. Ich würde nicht sicher wissen, ob der Stream gespült wird oder nicht, ohne nachzusehen, und ich bin wahrscheinlich nicht allein. Wenn Sie den expliziten Aufruf flush()
aufrufen, wird dies deutlich, , und der Code wird dadurch leichter lesbar.
Außerdem bedeutet der Methodenname close()
nichts über Spülen. Es ist von der Closeable
Schnittstelle, und natürlich, sagt nichts über Spülen. Wenn Sie einen gepufferten Ausgabestream vor dem Schließen nicht leeren, trotz des Wunsches, es zu leeren, Sie verlassen sich auf Annahmen, die wahr sein können oder nicht. Es würde Ihre Implementierung schwächen.
Alle Annahmen, die Sie treffen, sollten Sie irgendwie an zukünftige Betreuer weitergeben. Eine Möglichkeit, dies zu tun ist durch einen Kommentar zu verlassen:
// no need to flush() manually, close() will do it automatically
Wenn Sie diesen Kommentar nicht verlassen, Zukunft Maintainer müssen auch die javadoc Nachschlag kann, wie ich, wenn sie don‘ Ich habe es auswendig gelernt. Aber warum sollten Sie einen solchen Kommentar schreiben, wenn es einfacher und besser ist, ihn einfach selbst zu nennen und damit fertig zu sein.
Kurz gesagt, Spülen zuerst vor dem Schließen folgt einfach einer guten Logik. Keine Notwendigkeit für Annahmen und zweite Vermutungen, und keine Notwendigkeit, Ihre Leser zum Nachdenken zu bringen.
IMO, Sie nicht, aber das bedeutet nicht, dass es eine gute Idee ist :-) Wenn Sie von Writer oder OutputStream-Implementierung wechseln, können Sie unerwartete Verhalten beenden, wenn Sie diejenigen, die es brauchen nicht flush. Sie können argumentieren, dass einige nutzlose flush() es ist ein schlechtes JVM Design, dann meine Antwort ist "vielleicht" :-) Eine andere Sache, die wir erforschen können, ist Rückwärtskompatibilität, wenn frühere Versionen der JVM auch ohne die gut funktionieren spülen(). – Leo
Worum genau fragen Sie, was nicht in der Frage enthalten ist, auf die Sie verlinken? – jarnbjo
@jarnbjo, ich muss nur wissen, ob dies nur eine Leerlaufarbeit ist, außer dass dies nur eine Regel explizit folgt? – Jaskey