完成使用后我是否需要调用HttpURLConnection.disconnect

以下代码基本上按预期工作。 然而,为了偏执,我想知道,为了避免资源泄漏,

  1. 完成使用后,是否需要调用HttpURLConnection.disconnect
  2. 我需要调用InputStream.close吗?
  3. 我需要调用InputStreamReader.close吗?
  4. 我是否需要拥有以下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); } } } 

是的,您需要先关闭输入流,然后关闭httpconnection。 按照javadoc 。

每个HttpURLConnection实例用于发出单个请求,但是与HTTP服务器的基础网络连接可以由其他实例透明地共享。 在请求之后调用HttpURLConnection的InputStream或OutputStream上的close()方法可以释放与此实例关联的网络资源,但不会影响任何共享持久连接。 如果此时持久连接处于空闲状态,则调用disconnect()方法可能会关闭底层套接字。

接下来的两个问题答案取决于您的连接目的。 阅读此链接了解更多详情。

我认为调用setDoInput()或setDoOutput()的要求是确保在向连接上的流写入或读取任何内容之前调用它们。 除此之外,我不确定调用这些方法时是否重要。