大家好我明白,如果我们从InputStream读取字节并且我们已经读完所有字节(或者我们不打算读取到流的末尾),我们必须调用close()来释放与流相关的系统资源.
现在我想知道我是否读取字节并抛出java.io.IOException,我是否仍然需要调用close()来释放与流相关的系统资源?
或者是错误的,流是自动关闭的,所以我们不必调用close()?
操作系统本身可能会关闭流并释放资源,因为进程(即JVM)已终止,但并未强制执行此操作.
你应该总是实现一个finally块,你可以在这样的情况下关闭它,例如:
InputStream is = null;
try {
is = new FileInputStream(new File("lolwtf"));
//read stuff here
} catch (IOException e) {
System.out.println("omfg, it didn't work");
} finally {
is.close();
}
Run Code Online (Sandbox Code Playgroud)
如果它首先投入使用,这并不能保证正常工作,但是你可能还想在那时终止,因为你的数据源可能在某种程度上搞砸了.你可以找到更多关于它的信息,如果你保留了它InputStream的提供者,比如,如果我File在我的例子中保留了对象的参考,我可以通过File界面检查它是否存在等,但这是特定于你的特定数据提供者.
这种策略在网络会话中变得更有用,例如,使用Hibernate ...
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |