HttpURLConnection Closing IO Streams

connection, httpurlconnection, java, sockets, stream

Solution

You should call `close()` on the input/output/error streams when you are finished using them.

Disconnect is more complicated. According to the javadoc for `disconnect()`:

"Indicates that other requests to the server are unlikely in the near future."

This is recognizing the fact that HTTP 1.1 spec has a "persistent connection" feature that allows the same TCP/IP connection to be used in a sequence of requests to the same server. (This happens transparently.) When you call `disconnect`, it is likely to be taken as a hint to close the connection.

So from a resource and performance perspective:

- it is good idea to call `disconnect` if you aren't likely to send another request to the same server,

- it is a bad idea if another request is likely in the near future.

Problem

I am new to Java and HttpURLConnection. Should I close the opened IO streams before dropping the connection. If I close the streams, should I need to drop the connection as well? Which is the proper way of implementation? ``` try { String uri = "http://localhost:8081/RESTEASY/saju/post/text"; URL url = new URL(uri); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Accept", "text/plain"); connection.setRequestProperty("Content-Type", "text/plain"); connection.setDoOutput(true); OutputStream os = connection.getOutputStream(); //bla bla System.out.println(connection.getResponseCode()); InputStream iStream = connection.getInputStream(); //bla bla } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ // os.close(); - IS THIS REQUIRED // iStream.close(); - IS THIS REQUIRED connection.disconnect(); } } ```

Original source