HttpURLConnection关闭IO流
问题描述:
我是Java和HttpURLConnection的新手。我应该在断开连接之前关闭打开的IO流。如果我关闭了这些流,我是否还需要删除连接?哪一种是正确的实施方式?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为disconnect()
:
“表示在不久的将来,其他请求到服务器的可能性不大。”
这意识到HTTP 1.1规范具有“持续连接”功能,该功能允许在对同一服务器的一系列请求中使用相同的TCP/IP连接。 (这种情况透明。)当您致电disconnect
时,可能会将其视为关闭连接的提示。
所以:
- 这是好主意,打电话
disconnect
如果你是不太可能发送另一个请求到同一台服务器, - 是如果另一个坏主意很可能在不久的将来提出要求。
您确定您的声明对于关闭流是正确的吗?我遇到了困难(可能是我坚持使用的JDK 1.6是bug)。但从某种意义上来说,如果在读取输入流之前关闭输出流,那么它会关闭套接字,并且无法读取输入。如果你关闭输入流然后试图关闭输出流,那么你也会得到一个异常,导致套接字关闭。 我想要一个响应处理程序来处理输入流本身,但它似乎正确的顺序是写入输出,读取输入,关闭输出,关闭输入? – fd8s0 2013-08-28 16:25:36
我不确定我说的话有多大意义,我最终解决了我的问题,但是对于高频率请求,顺序非常重要,特别是您需要确保您读取整个输入/错误流......这种输入和错误流的分离是荒谬的,我不知道谁是涉及到的天才 – fd8s0 2013-08-28 17:33:11