2015-12-03 11 views
5

Ich bin heute auf diese Frage gestoßen und bin mir nicht sicher, ob sie geschlossen werden, da sie eingepackt ist oder ob es immer noch notwendig ist, alle Streams unabhängig voneinander zu schließen.Muss ich explizit alle Streams schließen, wenn sie über Java in einen Puffer eingebunden sind?

+0

Es ist nah alle Ströme im Zusammenhang ... aber es wouldn‘ t verletzt die anderen – 3kings

+2

@ 3kings - Nun, ich würde argumentieren, dass redundanter Code tut weh. Besser, sich auf den Vertrag von 'close()' zu verlassen, als zusätzliche Aufrufe an jeden Leser/Stream hinzuzufügen, nur um es zu tun. –

Antwort

8

Wenn irgendein Leser oder Stream einen anderen Leser/Stream schmückt, schließt das Schließen des äußeren auch den inneren. Dies kann aus der Javadoc von Closeable#close() impliziert werden:

Schließt diesen Strom und gibt alle Systemressourcen mit ihm verbunden ist.

Das gilt auch für die zugrunde liegenden Ressourcen.

Wenn Sie sehr neugierig sind, können Sie in die Quellen dieser Klassen, z. in BufferedReader:

public void close() throws IOException { 
    synchronized (lock) { 
     if (in == null) 
      return; 
     try { 
      in.close(); 
     } finally { 
      in = null; 
      cb = null; 
     } 
    } 
} 

wo in ist die zugrunde liegende Reader.

5

Ja, dekorierte Bäche sind auch geschlossen.

InputStream in = new FileInputStream("c:\\myfile.txt"); 
InputStreamReader reader = new InputStreamReader(in); 
BufferedReader bufferedReader = new BufferedReader(reader); 

bufferedReader.close(); 

in.read(); // throws an IOException (no such file or directory) 
reader.read(); // throws an IOException (Stream closed) 
4

Von Java 7 Sie die Try-with-Ressourcenblock (und die Tatsache, dass die Schließung reader die anderen schließt) verwenden können

try (BufferedReader reader = new BufferedReader(
           new InputStreamReader(new FileInputStream(file), "UTF-8"))) { 

    // do I/O operations 
} catch(IOException e) { 
    Log.d("IOException", "The Data Could Not Be Read =/", e); 
} 
Verwandte Themen