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

4

1 回答 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();
于 2013-07-05T14:15:16.257 回答