我知道这里有几个类似的题目,但是大多数人都已经忘了在他们的流中放一个close()指令.这是不同的. 让我说我有以下最小的例子:
public void test() throws IOException
{
InputStream in;
if( file.exists() )
{
in = new FileInputStream( file );
}
else
{
in = new URL( "some url" ).openStream();
}
in.close();
}
这给我一个资源泄漏:“in”从来没有在Eclipse中关闭警告(Juno SR1). 但是当我将in.close()移动到条件块中时,警告消失:
public void test() throws IOException
{
InputStream in;
if( file.exists() )
{
in = new GZIPInputStream( new FileInputStream( file ) );
in.close();
}
else
{
in = new URL( "some URL" ).openStream();
}
}
这里发生了什么?
解决方法 这是我如何写:
public void test() throws IOException
{
InputStream in = null;
try {
if(file.exists()) {
in = new FileInputStream( file );
} else {
in = new URL( "some url" ).openStream();
}
// Do something useful with the stream.
} finally {
close(in);
}
}
public static void close(InputStream is) {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
总结 以上是脚本之家为你收集整理的java – 资源泄漏:’in’从来没有关闭,尽管它已关闭全部内容,希望文章能够帮你解决java – 资源泄漏:’in’从来没有关闭,尽管它已关闭所遇到的程序开发问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。