Java 为什么Apache CloseableHttpResponse在关闭时不使用实体?
查看示例,它给出了以下代码示例:Java 为什么Apache CloseableHttpResponse在关闭时不使用实体?,java,apache,apache-httpclient-4.x,autocloseable,Java,Apache,Apache Httpclient 4.x,Autocloseable,查看示例,它给出了以下代码示例: CloseableHttpClient-httpclient=HttpClients.createDefault(); HttpGet HttpGet=新的HttpGet(“http://targethost/homepage"); CloseableHttpResponse response1=httpclient.execute(httpGet); //底层HTTP连接仍由响应对象保持 //允许直接从网络套接字传输响应内容。 //以确保系统资源的正确释放 /
CloseableHttpClient-httpclient=HttpClients.createDefault();
HttpGet HttpGet=新的HttpGet(“http://targethost/homepage");
CloseableHttpResponse response1=httpclient.execute(httpGet);
//底层HTTP连接仍由响应对象保持
//允许直接从网络套接字传输响应内容。
//以确保系统资源的正确释放
//用户必须从finally子句调用CloseableHttpResponse#close()。
//请注意,如果响应内容未完全消耗底层
//连接无法安全地重新使用,将被关闭并丢弃
//通过连接管理器。
试一试{
System.out.println(response1.getStatusLine());
HttpEntity entity1=response1.getEntity();
//对响应体执行一些有用的操作
//并确保它被完全消耗
EntityUtils.consume(entity1);
}最后{
响应1.close();
}
上面代码中的两条注释表示,我们必须为
“正确释放系统资源”
及
“如果响应内容未完全使用,则无法安全地重新使用基础连接,连接管理器将关闭并丢弃该连接。”
现在Apache非常友好地为我们实现了一个CloseableHttpResponse,这意味着我们可以使用try with resources块。但是close方法只关闭响应对象,为什么它不同时使用实体?因为此时很难说调用方是否打算重新使用底层连接。在某些情况下,可能需要从大型响应体中读取一小块内容,然后立即终止连接 换句话说,同样的事情一次又一次地发生:没有一种方法可以让每个人都快乐 代码片段将确保在尝试保持底层连接活动的同时适当地取消资源分配
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://targethost/homepage");
CloseableHttpResponse response1 = httpclient.execute(httpGet);
try {
System.out.println(response1.getStatusLine());
} finally {
EntityUtils.consume(response1.getEntity());
}
你刚才用确切的话问了我确切的问题。这是y,我们有stackoverflow来了解多个开发者的想法,谢谢