setDoInput y setDoOutput en Java HttpURLConnection

¿Cuál es la función o el propósito de HttpURLConnection.setDoInput o HttpURLConnection.setDoOutput ?

De la documentación para URLConnection :

Establezca el indicador DoInput en verdadero si tiene la intención de usar la conexión URL para la entrada, falso si no. El defecto es cierto.

Establezca el indicador DoOutput en verdadero si pretende utilizar la conexión URL para la salida, falso si no. El valor predeterminado es falso.

En cuanto al propósito real, no parece que nada en el código de Oracle verifique la variable doInput . Sin embargo, el doOutput predeterminado falso de doOutput evitará que llame a getOutputStream() necesario para las solicitudes HTTP POST. Por lo tanto, es una forma de indicar con anticipación que espera escribir en un OutputStream sin realmente establecerlo.

Todavía estaba confundido en cuanto a lo que significaba exactamente en la documentación por “Usar la conexión url para la entrada”.

Eso podría significar que desea leer información de la respuesta o que desea ingresar información en su solicitud. La documentación establece:

Se puede utilizar una conexión de URL para entrada y / o salida. Establecer el indicador doInput en verdadero indica que la aplicación pretende leer datos de la conexión URL.

El valor predeterminado de este campo es verdadero.

Entonces, si desea ignorar los datos de la respuesta, entonces puede configurar doInput en falso. Si desea utilizar getInputStream (), debe dejar esto solo o establecerlo en verdadero.

Se puede utilizar una conexión de URL para entrada y / o salida. Establecer el indicador doOutput en verdadero indica que la aplicación pretende escribir datos en la conexión URL.

El valor predeterminado de este campo es falso.

Por lo tanto, si desea agregar datos a la solicitud (llamando a getOutputStream ()), entonces debe establecer doOutput en verdadero.

Los métodos son declarados por la superclase, URLConnection . Creo que la intención era habilitar posibles optimizaciones en las implementaciones concretas. Recuerde que URLConnection es un protocolo URLConnection (pero HttpURLConnection obviamente no lo es).