以下代碼基本上按預期工作。然而,要偏執,我想知道,以避免資源泄漏,完成使用後需要調用HttpURLConnection.disconnect
- 我需要調用
HttpURLConnection.disconnect
,完成後的使用情況如何? - 我需要撥打
InputStream.close
嗎? - 我需要撥打
InputStreamReader.close
嗎? - 我是否需要以下2行代碼:
httpUrlConnection.setDoInput(true)
和httpUrlConnection.setDoOutput(false)
,緊接着構建httpUrlConnection?
我這樣問的原因是我看到的大多數例子都沒有做這樣的清理。 http://www.exampledepot.com/egs/java.net/post.html和http://www.vogella.com/articles/AndroidNetworking/article.html。我只是想確保這些例子是正確的。
public static String getResponseBodyAsString(String request) {
BufferedReader bufferedReader = null;
try {
URL url = new URL(request);
HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpUrlConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
int charRead = 0;
char[] buffer = new char[1024];
StringBuffer stringBuffer = new StringBuffer();
while ((charRead = bufferedReader.read(buffer)) > 0) {
stringBuffer.append(buffer, 0, charRead);
}
return stringBuffer.toString();
} catch (MalformedURLException e) {
Log.e(TAG, "", e);
} catch (IOException e) {
Log.e(TAG, "", e);
} finally {
close(bufferedReader);
}
return null;
}
private static void close(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException exp) {
Log.e(TAG, "", exp);
}
}
}
謝謝。你認爲上述兩個教程鏈接有錯誤,因爲它們不會調用斷開連接嗎?或者,我錯過了什麼? –
我不認爲這是一個錯誤。但是,斷開連接是極端的情況(套接字關閉打開操作是昂貴的),除非你真的想我不會去做它。 stream.close()釋放大部分網絡資源,應該足夠了。同樣,如果您的要求可以每次都創建套接字,那麼在調用斷開連接時沒有任何問題。 – kosa
我會不斷地向一個幾乎相同的服務器發出請求,內存泄漏是我唯一關心的問題。如果我正確理解文檔,則不需要在我的情況下調用斷開連接。 –