我有以下代码:
HttpGet downloadRequest = new HttpGet("url?size=10000000");
HttpResponse response = this.httpClient.execute(downloadRequest);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
while ((length = (int)inputStream.skip((long)BUFFER_SIZE)) != 0) {
...
}
inputStream.close();
这是一个从网址下载数据的非常基本的程序。我的问题是,如果完成下载所有数据,它工作正常;但是,如果我试图强制停止下载进度(例如,在1秒后中断while循环),
inputStream.close();
需要很长时间才能关闭inputStream。它下载的数据越多,关闭它所需的时间就越多。
关闭inputStream时,我做错了吗?有没有办法立即关闭inputStream的安全性,无论有多少数据留在" inputStream"?
答案 0 :(得分:0)
我遇到了同样的问题,帮助我的是在关闭httpget.abort()
之前和发出InputStream
之前发出EntityUtils.consume(entity)
。
httpget.reset()
应具有相同的效果。
答案 1 :(得分:0)
我在处理Post请求时遇到了同样的问题。我追踪发现了导致HttpResponse挂起的原因,因为它仍然在流传输大数据。 解决方法是从一开始就中止请求。类似于以下内容
HttpPost httpPost = new HttpPost("request/endpoint");
httpPost.abort();
// do the rest down here