Sprich der Javadoc :
Streams haben eine BaseStream.close () -Methode und implementieren AutoCloseable, aber fast alle Stream-Instanzen müssen nach der Verwendung nicht wirklich geschlossen werden. Im Allgemeinen müssen nur Streams geschlossen werden, deren Quelle ein E / A-Kanal ist (z. B. die von Files.lines (Path, Charset) zurückgegebenen). Die meisten Streams werden von Sammlungen, Arrays oder generierenden Funktionen unterstützt, für die keine spezielle Ressourcenverwaltung erforderlich ist. (Wenn ein Stream geschlossen werden muss, kann er in einer try-with-resources-Anweisung als Ressource deklariert werden.)
"Fast alle" und "allgemein" sind vage - wenn Sie eine Bibliothek schreiben und den Benutzern dieses Streams die Quelle Ihres Streams entziehen, müssen Sie sich auf jeden Fall die Frage stellen - "sollte ich schließen Dies?" E / A-gestützte Streams müssen geschlossen werden, da Terminaloperationen nicht aufgerufen close
werden. Daher muss ich mich immer daran erinnern, woher mein Stream stammt, oder ich muss close
es immer dokumentieren .
Ich schätze, die nukleare Option wäre, keine Streams von Methoden zurückzugeben oder Stream-Parameter zu akzeptieren. Dies ist eine Ansicht, die von einigen Leuten im JDK-Team bestätigt wurde. Ich finde, dass dies in Anbetracht des praktischen Nutzens von Streams zu einschränkend ist.
Was sind Ihre bewährten Methoden zum Schließen von Streams? Ich habe online nach einer Antwort von einigen der JDK-Leute gesucht, die normalerweise in ähnlichen Community-Fragen aktiv sind, aber nichts Relevantes gefunden haben.