2010-06-12 20 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; 
     } 
    } 
}