[英]Closing BufferedReader and InputStreamReader
這段代碼正在創建BufferedReader和InputStreamReader導致的內存泄漏問題,我認為可能會發生一些異常。 我該怎么改變它?
try{
URL url = new URL(sMyUrl);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((str = in.readLine()) != null) {
jsonString += str;
}
in.close();
}catch(Exception e){
}
使用try..finally
塊關閉流更安全。 您也可以使用StringBuilder
因為它是為連接字符串而設計的。 您還應該避免捕獲Exception
並對其執行任何操作。 此外,您的代碼是連接行沒有任何換行符。 這可能不是你想要的,在這種情況下,當你讀取每一行時append("\\n")
。
這是一個包含這些修改的版本:
StringBuilder json = new StringBuilder();
try {
URL url = new URL(sMyUrl);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
try {
String str;
while ((str = in.readLine()) != null) {
json.append(str).append("\n");
}
} finally {
in.close();
}
} catch (Exception e) {
throw new RuntimeException("Failed to read JSON from stream", e);
}
代碼不漂亮,但不會造成內存泄漏。 我建議你使用內存分析器來確定你的內存使用位置。 否則你只是猜測即使你有10年以上的Java經驗性能調優;)
更好的選擇是使用Java 7
URL url = new URL(sMyUrl);
try(BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
while ((str = in.readLine()) != null) {
jsonString.append(str).append("\n");
}
}
如果您使用Java 6或更早版本,則可以使用。
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
try {
while ((str = in.readLine()) != null) {
jsonString.append(str).append("\n");
}
} finally {
in.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.