【发布时间】:2014-06-11 07:46:30
【问题描述】:
我创建了一个小型抓取类,下面的方法从页面中读取文本。
但是,我发现该方法无法正确关闭连接。这会导致大量打开的连接导致我的托管公司暂停我的帐户。以下是正确的吗?
private String getPageText(String urlString) {
String pageText = "";
BufferedReader reader = null;
try {
URL url = new URL(urlString);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder builder = new StringBuilder();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1)
builder.append(chars, 0, read);
pageText = builder.toString();
} catch (MalformedURLException e) {
Log.e(CLASS_NAME, "getPageText.MalformedUrlException", e);
} catch (IOException e) {
Log.e(CLASS_NAME, "getPageText.IOException", e);
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
Log.e(CLASS_NAME, "getPageText.IOException", e);
}
}
return pageText;
}
【问题讨论】:
-
您应该先关闭 URL 连接(即,与
url.openStream相反)。 -
你知道怎么做吗?我无法使用自动完成功能找到它。
-
我认为下面的答案(@epoch)显示了如何做得很好......
-
根据documentation 阅读器关闭与其关联的所有资源。所以我认为你的代码是正确的。
-
@cy3er,阅读器与输入流相关联,而不是连接
标签: java bufferedreader