Ich möchte den Inhalt eines InputStream
in eine String
lesen:Sollen BufferedReader und InputStreamReader explizit geschlossen werden?
private String readToString(InputStream stream) {
return new BufferedReader(new InputStreamReader(stream))
.lines().collect(Collectors.joining("\n"));
}
Der Strom kommt aus java.lang.Process
.
Frage: Muss ich in diesem Fall einen der InputStream
, InputStreamReader
oder BufferedReader
explizit schließen?
Nebenbei bemerkt: die verknüpfte Frage ist kein Duplikat, wie meine Frage nach WIE ist richtig, die Ströme nahe an, nicht wie der Stream in einen String zu lesen!
Das [javadoc für 'linien'] (https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#lines--) scheint zu implizieren, dass der Stream nicht funktioniert. t wird automatisch geschlossen. – assylias
nur eine Seite nicht Sie bekommen wahrscheinlich 'InputStream' aus einer' Datei' am wahrscheinlichsten. warum nicht 'File.lines' direkt verwenden? – Eugene
Schließen Sie nichts. Wenn Sie den BufferedReader oder den InputStreamReader schließen, schließen sie implizit auch den InputStream. Aber diese Verantwortung sollte bei demjenigen liegen, der sie geöffnet hat (vorzugsweise in einem Versuch mit Ressourcen). Wenn Sie den gesamten Text in einen String lesen möchten, lesen Sie Zeile für Zeile nicht nur, um die Zeilen zu einer einzigen Zeichenfolge zusammenzufassen. Es gibt nichts besonderes an dem Newline-Zeichen, das bedeutet, dass die Datei so aufgeteilt werden muss. Lesen Sie stattdessen die gesamte Datei als Byte und konvertieren Sie sie mit der von Ihnen gewählten Codierung in Zeichen. – DodgyCodeException