【发布时间】:2017-09-28 05:08:35
【问题描述】:
如果这段代码 100% 避免内存泄漏或保持套接字打开,我不是 100%:
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
URLConnection connection = new URL(url).openConnection();
connection.setReadTimeout(5000);
connection.setConnectTimeout(8000);
try (InputStream is = connection.getInputStream()) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
}
}
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
我是否也需要将“BufferedReader rd”放入内部第二次尝试中,还是会过时?如果发生读取或连接超时,并且尝试尚未完成怎么办?顺便说一句,为什么 URLConnection 没有 disconnect() 或 close() 函数?
【问题讨论】:
-
如果您决定将
BufferedReader放在try-with-resources 中,您可以将它放在同一个中。此外,您无需将InputStream放入 try-with-resources。 -
你的意思是像“try (BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")))) {"`?那会更省钱吗?
-
我认为两者都是安全的。
标签: java bufferedreader urlconnection try-with-resources