我有以下代码从URL对象中读取:
URL url= new URL("http://datasource.com");
BufferedReader reader = new BufferedReader(
new InputStreamReader(url.openStream()));
在我完成数据后,这是否足以关闭并释放所有的数据:
reader.close();
我没有看到URL关闭它的方法,比如URL.close()......但是想知道我是不是应该做更像这样的事情:
InputStreamReader inputStreamReader = new InputStreamReader(url.openStream());
BufferedReader reader = new BufferedReader(inputStreamReader);
// Do Stuff
inputStreamReader.close();
reader.close();
答案 0 :(得分: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;
}
}
}