2016-10-07 1 views
0

In meiner finally ich irgendwelche Ströme aufzuräumen, zum BeispielJava: Closing Streams: Bäche Nicht-NULL auch nach close()

  finally // Clean up 
      { 
       if (os != null) { 
        try { 
         os.close(); 
        } 
        catch (IOException ioe) { 
         logger.warn("Failed to close outputStream", ioe); 
        } 
       } 
       if (is != null) { 
        try { 
         is.close(); 
        } 
        catch (IOException ioe) { 
         logger.warn("Failed to close inputStream", ioe); 
        } 
       } 

Aber ich sehe, dass die Bäche bleiben nicht-NULL auch nach dem Schließen. Ist es falsch, nach NULL zu suchen? Oder sehe ich nicht das Ergebnis close?

+0

Verwenden Sie Java 7? Wenn ja, schauen Sie sich try-with-resources an, dann müssen Sie sich nicht einmal darum kümmern, die Streams zu schließen, wie sie für Sie gehandhabt werden (solange sie autoclosable implementieren, was die meisten Dinge wie BufferedInputStream tun – Ash

Antwort

5

Der Stream "Objekt" ist eine Referenz auf eine Instanz eines Streams. Ob der Stream offen ist oder nicht, ist Teil seines Status. Die close-Funktion ist eine Funktion, die im Objektstatus ausgeführt wird und sich daher nicht auf Referenzen auf sie auswirkt.

Die Referenz bleibt nicht NULL, bis Sie sie auf Null setzen, aber der Status des Streams ist geschlossen, was bedeutet, dass Sie ihn nicht mehr verwenden können.

+1

Gibt es einen Weg um zu überprüfen, ob es geschlossen ist? Und sollte das als Kriterium verwendet werden? –

+2

@geneb. Nach diesen Beiträgen: http://StackOverflow.com/Questions/8655901/How-to-check-whether-an-outputstream-is- geschlossen und http://stackoverflow.com/questions/981196/how-to-know-if-a-bufferedreader-stream-isclosed Sie werden nicht sehen können ... Aber die close-Funktion wird nie eine Ausnahme auslösen Man könnte sagen: "os = null; ist = null" nach dem Schließen, um die Referenzen auf Null zu setzen. Aber wenn die Funktion nach dem Schließen beendet wird, ist es nicht nötig. Ihr Code ist gut wie er ist;) –