Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpURLConnection关闭IO流_Java_Sockets_Stream_Connection_Httpurlconnection - Fatal编程技术网

Java HttpURLConnection关闭IO流

Java HttpURLConnection关闭IO流,java,sockets,stream,connection,httpurlconnection,Java,Sockets,Stream,Connection,Httpurlconnection,我不熟悉Java和HttpURLConnection。我是否应该在断开连接之前关闭打开的IO流。如果我关闭流,我是否也需要断开连接?哪一种是正确的实施方式 try { String uri = "http://localhost:8081/RESTEASY/saju/post/text"; URL url = new URL(uri); connection = (HttpURLConnection) url.openConnection(); connection.setRequest

我不熟悉Java和HttpURLConnection。我是否应该在断开连接之前关闭打开的IO流。如果我关闭流,我是否也需要断开连接?哪一种是正确的实施方式

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();    
}
}

使用完输入/输出/错误流后,应调用输入/输出/错误流上的
close()

断开连接更为复杂。根据javadoc for
disconnect()

“表示在不久的将来不太可能向服务器发出其他请求。”

这就是认识到HTTP 1.1规范具有“持久连接”功能,允许在对同一服务器的请求序列中使用相同的TCP/IP连接。(这是透明的)当您调用
disconnect
时,很可能会被视为关闭连接的提示

因此,从资源和性能的角度来看:

  • 如果您不可能向同一服务器发送另一个请求,最好调用
    断开连接
  • 如果在不久的将来可能会有另一个请求,这是一个坏主意

您确定您关于关闭流的陈述是正确的吗?我的日子不好过(可能是我一直使用的JDK1.6被窃听了)。但在某种意义上,如果在读取输入流之前关闭输出流,那么它会关闭套接字,而您无法读取输入。但是,如果您关闭输入流,然后尝试关闭输出流,那么您也会得到一个异常,因为套接字已关闭。我想要一个能够自己处理输入流的响应处理程序,但似乎正确的顺序是写输出、读输入、关闭输出、关闭输入?我不确定我说的是否有意义,我最终解决了我的问题,但顺序对于高频请求非常重要,特别是,您需要确保读取整个输入/错误流。。。这种输入和错误流的分离是荒谬的,我不知道谁是天才