1

说我有以下功能

public static void myfunc(String filename) {
    new FileInputStream(filename);
}

当我调用该函数时,是否会因为 FileInputStream 从未释放而导致资源泄漏?

以及将来的参考,有没有一种方法可以在调用函数后验证资源没有被释放?

4

3 回答 3

2

是的,存在资源泄漏。大多数 IDE(例如 Eclipse)会发出警告以表明这一点。您可能应该按照以下方式执行以下操作:

public static void myfunc(String filename) throws IOException {
    FileInputStream stream = null;
    try {
        stream = new FileInputStream(filename);
        ...
    } finally {
        stream.close();
    }
}

或者,如果您使用的是 Java 7,则可以使用try-with-resource语句。

于 2013-01-29T19:35:48.500 回答
1

是的,会有资源泄漏。FileInputStream 应始终关闭。

当 GC 运行时,finalize()应该调用该方法并且此时将关闭流,但您不应该依赖它。

检查是否存在资源泄漏的方法是阅读 javadoc,它对此进行了解释。基本上,所有实现 Closeable 接口的类都应该显式关闭。

于 2013-01-29T19:38:42.783 回答
-1

你明白这个函数没有做任何有用的事情,对吧?它不会将 FileInputStream 返回给调用者或对其进行任何操作。

通常,您会确保使用 try/finally 块关闭您的流:

InputStream input = null ; 

try {
    input = new FileInputStream(name);

    [read and process input]

} finally {
    if (input != null) {
        input.close();
    }
}
于 2013-01-29T19:40:53.570 回答