Java HttpURLConnection中的setDoInput和setDoOutput

Joh*_*azz 31 java

什么是功能或目的HttpURLConnection.setDoInputHttpURLConnection.setDoOutput

Whi*_*g34 21

从以下文档URLConnection:

如果您打算使用URL连接进行输入,请将DoInput标志设置为true,否则设置为false.默认值为true.

如果您打算将URL连接用于输出,请将DoOutput标志设置为true,否则设置为false.默认值为false.

至于实际目的,Oracle代码中的任何内容似乎都没有检查doInput变量.但是,doOutput默认值为false将阻止您调用getOutputStream()HTTP POST请求.因此,这是一种提前指示您希望在OutputStream没有实际建立的情况下写入的方法.

  • 当要忽略响应主体时,将调用setDoInput(false).Java核心代码确实将此调用JAXB和XML序列化为URL.请参阅:com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java和javax\xml\bind\JAXB.java (5认同)
  • 是的,我阅读了文档。只是不理解“打算在输入true或false时使用URL连接输入”。这到底是什么意思? (3认同)
  • 请注意,如果你设置doDoput(false),那么你甚至无法使用getResponseCode()检查是否成功,因为这会隐式打开输入流. (3认同)

Dan*_*ugh 12

我仍然对"使用url连接输入"在文档中的确切含义感到困惑.

这可能意味着您希望从响应中读取信息,或者您希望将信息输入其请求中.文件说明:

URL连接可用于输入和/或输出.将doInput标志设置为true表示应用程序打算从URL连接中读取数据.

此字段的默认值为true.

因此,如果要忽略响应中的数据,则可以将doInput设置为false.如果你想使用getInputStream(),那么你应该单独保留它或将其设置为true.

URL连接可用于输入和/或输出.将doOutput标志设置为true表示应用程序打算将数据写入URL连接.

该字段的默认值为false.

因此,如果要将数据附加到请求(调用getOutputStream()),则必须将doOutput设置为true.