This question already has answers here:
What is the difference between CloseableHttpClient and HttpClient in Apache HttpClient API?
(7个答案)
去年关闭。
我正在使用CloseableHttpResponse(来自apache-httpclient-4.5.3),我不确定我使用的是否正确,我最终看到answer with no votes可以使用
我是否没有丢失任何打开的资源或使用错误的方式使用它?
这同样适用于
现在,关于
在Java7之前,需要显式关闭:
(7个答案)
去年关闭。
我正在使用CloseableHttpResponse(来自apache-httpclient-4.5.3),我不确定我使用的是否正确,我最终看到answer with no votes可以使用
EntityUtils.consume
:CloseableHttpClient
是抽象的,没有可调用的close方法,尽管在此answer中使用了它:CloseableHttpResponse response = httpclient.execute(httpget);
try {
//do something
} finally {
response.close();
}
目前,我正在尝试使用send方法中CloseableHttpClient
和CloseableHttpResponse
的资源。我是否没有丢失任何打开的资源或使用错误的方式使用它?
private CloseableHttpResponse send()
throws URISyntaxException, UnsupportedEncodingException, IOException, ClientProtocolException {
URIBuilder uriBuilder = new URIBuilder(BASE_URL);
HttpHost target = new HttpHost(uriBuilder.getHost(), uriBuilder.getPort(), uriBuilder.getScheme());
HttpPost post = new HttpPost(uriBuilder.build());
try (CloseableHttpClient httpClient = HttpClients.custom().build(); CloseableHttpResponse response = httpClient.execute(target, post)) {
return response;
}
最佳答案
docs here中对此进行了详细说明。
从文档引用伪代码,这是分配/取消分配CloseableHttpClient
实例的典型方法:
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
<...>
}
这同样适用于
CloseableHttpResponse
:try (CloseableHttpResponse response = httpclient.execute(httpget)) {
<...>
}
现在,关于
CloseableHttpClient
中的close方法。 CloseableHttpClient
是实现Closeable
接口(interface)的抽象类。也就是说,尽管它本身没有close
方法,但是扩展它的类是实现close
方法所必需的。一类是InternalHttpClient
。您可以查看源代码以获取详细信息。在Java7之前,需要显式关闭:
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
<...>
} finally {
httpclient.close();
}
CloseableHttpResponse response = httpclient.execute(httpget);
try {
<...>
} finally {
response.close();
}
关于java - 关闭CloseableHttpResponse/CloseableHttpClient的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48928930/
10-08 22:23