作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
private InputStream input;
private InputStreamReader inputReader;
private BufferedReader reader;
try {
input = new InputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
// do I/O operations
} catch (IOException e) {
Log.d("IOException", "The Data Could Not Be Read =/");
} finally {
try {
reader.close(); // now will this, by default, close all other streams? OR
/*
* input.close(); inputStream.close(); //is this necessary, along with
* reader.close();
*/
} catch (IOException ex) {
ex.printStackTrace();
}
}
我今天遇到了这个问题,我不确定它们是否会被关闭,因为它被包裹了,或者是否仍然有必要关闭所有流独立。
最佳答案
如果任何阅读器或流修饰另一个阅读器/流,则关闭外部阅读器或流也会关闭内部阅读器。这可以从 Closeable#close()
的 Javadoc 中得到暗示。 :
Closes this stream and releases any system resources associated with it.
这也适用于底层资源。
如果您很好奇,可以深入研究这些类的来源,例如。在 BufferedReader
中:
public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
try {
in.close();
} finally {
in = null;
cb = null;
}
}
}
其中 in
是底层的 Reader
。
关于java - 如果它们通过 java 包装在缓冲区中,我是否必须显式关闭所有流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074078/
我是一名优秀的程序员,十分优秀!