没有关闭InputStream时是否存在内存泄漏问题?

4
我有以下块代码:

我有以下块代码:

URL url = new URL("http://abc.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();

BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream());

StringBuilder sb = new StringBuilder();

String str = null;

while (null != (str = reader.readLine())) {
    sb = sb.append(str);
}

resStr = sb.toString();

reader.close();
con.disconnect();

以上代码块中有两个输入流我没有关闭。

第一个是 new InputStreamReader(),第二个是 con.getInputStream()。我新建了两个输入流但没有关闭它们。因此,这可能导致内存泄漏?

注意:我正在使用jdk1.7.0_21。


10
因为您已经关闭了 reader,所以包装的流将自动关闭。 - Rohit Jain
感谢@DanielRenshaw。我清楚地理解了这个问题。 - Thinh Phan
1
由于您正在使用Java 7,因此应使用try-with-resources结构来确保关闭reader对象。当前,如果发生异常,reader将不会被关闭。即 try (BufferedReader reader = new Buff...) { // reading code } - Duncan Jones
1个回答

3
总结一下评论:因为关闭读取器也会关闭底层流,所以您没有内存泄漏。
由于你使用的是Java 7,可以使用try-with-resource的神奇功能。
URL url = new URL("http://abc.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();

try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));)
{
    StringBuilder sb = new StringBuilder();

    String str = null;

    while (null != (str = reader.readLine()))
        sb = sb.append(str);

    resStr = sb.toString();
}

con.disconnect();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接