如果下载量很大,则InputStream.close非常慢

时间:2014-11-03 20:16:00

标签: java

我有以下代码:

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"?

2 个答案:

答案 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