我使用CloseableHttpResponse(来自apache-httpclient-4.5.3),我不确定我是否正确使用它,我看到answer with no votes使用{{1}最后:
EntityUtils.consume
也是CloseableHttpClient是抽象的,并且没有紧密的方法来调用,尽管在answer使用了它:
CloseableHttpResponse response1 = httpclient.execute(httpGet);
try {
System.out.println(response1.getStatusLine());
} finally {
EntityUtils.consume(response1.getEntity());
目前,我在send方法中使用了CloseableHttpResponse response = httpclient.execute(httpget);
try {
//do something
} finally {
response.close();
}
和CloseableHttpClient
的资源。
我想知道我没有错过任何资源打开或以错误的方式使用它:
CloseableHttpResponse
先谢谢你
答案 0 :(得分:2)
文档here中已对此进行了详细说明
从文档中引用伪代码这是分配/取消分配CloseableHttpClient
实例的典型方法:
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
<...>
} finally {
httpclient.close();
}
同样适用于CloseableHttpResponse
:
CloseableHttpResponse response = httpclient.execute(httpget);
try {
<...>
} finally {
response.close();
}
现在,关于CloseableHttpClient
中的close方法。 CloseableHttpClient
是一个实现Closeable
接口的抽象类。也就是说,虽然它本身没有close
方法,但扩展它的类需要实现close
方法。一个班级是InternalHttpClient
。您可以查看源代码以获取详细信息。
答案 1 :(得分:2)
您可以通过使用try(resource)来避免final
try(CloseableHttpResponse响应= httpclient.execute(httpGet)){ ...}