HttpURLConnection关闭IO流 [英] HttpURLConnection Closing IO Streams

查看:1588
本文介绍了HttpURLConnection关闭IO流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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自动生成的catch块
e.printStackTrace
} catch(IOException e){
// TODO自动生成的catch块
e.printStackTrace();
} finally {
// os.close(); - 这是必需的
// iStream.close(); - 这是必需的
connection.disconnect();
}
}


解决方案



断开连接就是在输入/输出/错误流上调用 close()更复杂。根据javadoc的 disconnect()


表示其他请求


这是认识到HTTP 1.1规范具有持久连接功能的事实允许在对同一服务器的请求序列中使用相同的TCP / IP连接。 (这发生得透明。)当调用 disconnect 时,它可能被看作是关闭连接的提示。



所以从资源和性能角度来看:




  • 如果您不太可能向同一个服务器发送另一个请求, c> c> c> 可能在不久的将来。


I am new to Java and HttpURLConnection. Should I close the opened IO streams before dropping the connection. If I close the streams, should I need to drop the connection as well? Which is the proper way of implementation?

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

解决方案

You should call close() on the input/output/error streams when you are finished using them.

Disconnect is more complicated. According to the javadoc for disconnect():

"Indicates that other requests to the server are unlikely in the near future."

This is recognizing the fact that HTTP 1.1 spec has a "persistent connection" feature that allows the same TCP/IP connection to be used in a sequence of requests to the same server. (This happens transparently.) When you call disconnect, it is likely to be taken as a hint to close the connection.

So from a resource and performance perspective:

  • it is good idea to call disconnect if you aren't likely to send another request to the same server,
  • it is a bad idea if another request is likely in the near future.

这篇关于HttpURLConnection关闭IO流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆