HttpURLConnection关闭IO流

5

我刚接触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();    
}
}
1个回答

10

当您完成使用输入/输出/错误流时,应调用close()

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

  

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

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

因此,从资源和性能的角度考虑:

  • 如果您不太可能向同一服务器发送另一个请求,则调用disconnect是一个好主意,
  • 如果在不久的将来可能会发送另一个请求,则是一个坏主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接