Mehrere resources mit try-with-resources verwalten

In deinem Beispiel schließt try(BufferedOutputStream) zwar den übergebenen OutputStream gleich mit. Aber OutputStreamWriter und BufferedWriter werden nicht vorher geschlossen. Kann also sein, dass sich noch ungeschriebene Daten in der Pipeline befinden.

Würdest du BufferedWriter in den try-Block legen, schließt der wiederum nicht alle darunter liegenden Streams und wir wissen alle wohin ungeschlossene Streams führen können. :smiley:

Von daher ist die Google-Methode schon richtig. Er schließt die Streams, nacheinander, von oben nach unten.

Sicher dass das so funktioniert? Meiner Meinung müsste man das wenn dann so schreiben:

try (BufferedOutputStream bos = new BufferedOutputStream(itemResource.openOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(bos, StandardCharsets.UTF_8);
BufferedWriter bw = new BufferedWriter(osw)) {
}

wobei ich nicht sicher bin, ob die auch in der richtigen Reihenfolge geschlossen werden?