2016-04-26 6 views
3

ich die Antwort auf How to convert InputStream to virtual File verwendet, die org.apache.commons.io.IOUtils nutzt die gegebenen InputStream zu einem FileOutputStream um eine File zu erstellen zu kopieren.Sollte schließe ich die Input von org.apache.commons.io.IOUtils

Sollte ich die InputStream angegebenen schließen?

+0

Keine Notwendigkeit, Eingangsströme als solche zu schließen, Wir müssen explizit Ausgangsströme schließen, Sie können es schließen, wenn Sie möchten, können Sie angeben, welches Problem Sie konfrontiert sind? –

+0

Ich habe kein Problem. Ich habe immer Probleme zu verstehen, wann und warum ich Streams schließen sollte. Ich habe den Code gesehen, um einen InputStream in eine virtuelle Datei zu konvertieren, ohne den InputStream zu schließen. Also überlegte ich, ob es nötig sein würde, es zu schließen. – ilopezluna

+1

Nach Rücküberlegung, ich denke, wir sollten es schließen, da es den Zeiger/Handle zu unserer Datei, Offset enthalten wird, bis zu dem es den Inhalt der Datei gelesen hat, und andere Informationen bezüglich derselben. Wenn wir es schließen, geben wir das Ressourcen-Erstellungsprogramm effizient frei. –

Antwort

6

Es ist eine bewährte Methode, InputStream zu schließen. Siehe hierzu question.

org.apache.commons.io.IOUtils.copy Ströme nicht schließen. Also musst du schließen.

Siehe Javadoc

Wo immer möglich, die Methoden in dieser Klasse nicht bündig oder schließen Sie den Stream. Dies dient dazu, nicht tragbare Annahmen über die Herkunft und weitere Verwendung der Streams zu vermeiden. Somit ist der Aufrufer immer noch verantwortlich für das Schließen von Streams nach dem Gebrauch.

1

bearbeitet: Nachdem die Frage erneut zu lesen Ich habe meine Antwort zu korrigieren, weil die Frage offenbar über die InputStream aus der referenzierten Antwort und nicht die OutputStream war. Die muss geschlossen werden (siehe die Antwort von @Adi). Die OutputStream ist jedoch in der Try-with-Resources-Anweisung, so dass Sie diese nicht schließen müssen.

Die Antwort, auf die in der Frage verwiesen wird, verwendet das Java 7 try-with-resources Statement, das sicherstellt, dass die Ressource am Ende der Anweisung geschlossen wird.

Die try-with-resources-Anweisung ist eine try-Anweisung, die eine oder mehr Ressourcen deklariert. Eine Ressource ist ein Objekt, das nach geschlossen werden muss, damit das Programm beendet ist. Die try-with-resources-Anweisung stellt sicher, dass jede Ressource am Ende der Anweisung geschlossen wird.

Also für die OutputStream, NO, in diesem speziellen Fall, dass Sie brauchen nicht die OutputStream selbst zu schließen, vorausgesetzt, Sie Try-with-Ressource verwenden.

Die InputStream jedoch muss geschlossen werden.

Verwandte Themen