以下代码基本上可以正常工作。然而,为了谨慎起见,我想知道以下几点,以避免资源泄漏:
- 在使用完后,我是否需要调用
HttpURLConnection.disconnect
? - 是否需要调用
InputStream.close
? - 是否需要调用
InputStreamReader.close
? - 在构造 httpUrlConnection 后,我是否需要使用以下两行代码:
httpUrlConnection.setDoInput(true)
和httpUrlConnection.setDoOutput(false)
?
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);
}
}
}
org.eclipse.jetty.io.EofException: early EOF
异常。当我删除对disconnect
的调用并仅关闭输出流时,该异常消失。有人可以确认这种行为吗? 在Android 4.2上,关闭流和断开HttpUrlConnection按预期工作。 - Sebastian S.disconnect
方法,并且在示例中他们没有关闭输入流,这表明disconnect
方法会为您完成这个操作。 - Peppe L-G