Мне нужно вызвать HttpURLConnection.disconnect после окончания использования

Следующий код в основном работает так, как ожидалось. Однако, чтобы быть параноидальным, мне было интересно, чтобы избежать утечки ресурсов,

  1. Нужно ли мне позвонить HttpURLConnection.disconnect после завершения его использования?
  2. Мне нужно вызвать InputStream.close ?
  3. Мне нужно вызвать InputStreamReader.close ?
  4. Нужно ли иметь следующую строку кода: 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); } } } 

Solutions Collecting From Web of "Мне нужно вызвать HttpURLConnection.disconnect после окончания использования"

Да, вам нужно сначала закрыть входной поток и закрыть httpconnection. Согласно javadoc .

Каждый экземпляр HttpURLConnection используется для создания единого запроса, но базовое сетевое подключение к HTTP-серверу может быть прозрачно распространено другими экземплярами. Вызов методов close () в InputStream или OutputStream HttpURLConnection после запроса может освобождать сетевые ресурсы, связанные с этим экземпляром, но не влияет на какое-либо совместное постоянное соединение. Вызов метода disconnect () может закрыть базовый сокет, если в то время постоянное соединение неактивно.

Ответ на следующие два вопроса зависит от цели вашего подключения. Прочтите эту ссылку для получения более подробной информации.

Я считаю, что требование вызова setDoInput () или setDoOutput () состоит в том, чтобы убедиться, что они вызываются до того, как что-либо записано или прочитано из потока в соединении. Помимо этого, я не уверен, что это важно, когда называются эти методы.