2010-06-12 21 views
0

我有下面的代碼從一個URL對象爲:閉幕inputstreams

URL url= new URL("http://datasource.com");  
BufferedReader reader = new BufferedReader(
           new InputStreamReader(url.openStream())); 

我做了獲取數據後,這是足以關閉並釋放所有resrouces:

reader.close(); 

我沒有看到URL關閉它的方法,比如URL.close()...但是想知道我是不是應該做更像這樣的事情:

InputStreamReader inputStreamReader = new InputStreamReader(url.openStream()); 
BufferedReader reader = new BufferedReader(inputStreamReader); 
// Do Stuff 
inputStreamReader.close(); 
reader.close(); 

回答

1

關閉閱讀器就夠了, 因爲Reader/InputStream類是由裝飾器模式實現的,所以close動作會傳播到decoratee。

在BufferedReader中的源極,所述讀取器(在變量)被關閉,也:

public void close() throws IOException { 
    synchronized (lock) { 
     if (!isClosed()) { 
      in.close(); 
      buf = null; 
     } 
    } 
} 

在InputStreamReader的源極,輸入流被關閉時,也:

@Override 
public void close() throws IOException { 
    synchronized (lock) { 
     // BEGIN android-added 
     if (decoder != null) { 
      decoder.reset(); 
     } 
     // END android-added 
     decoder = null; 
     if (in != null) { 
      in.close(); 
      in = null; 
     } 
    } 
}