HttpClient发送请求下载大文件时一直阻塞,直到下载完后才执行代码
目前在用asyncClient,使用Future接口阻塞线程获取HttpResponse,然后getEntity().getContent()读取字节流。
测试时都是找各种图片的URL,阻塞时间有些长,开头我还以为是本地网络有些延迟。
代码写得差不多的时候,拿大文件的URL去测试,看着流量监控,数据一直在下载,而程序一直没响应。。。代码里设有时间限制,都直接给抛出超时异常了。主线程没结束,但asyncClient依然下载那些数据。。。假如我只想获取HTTP响应头部,甚至要有过滤,那岂不是在浪费时间?
有办法禁止预下载么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Good!!! 我没用过这个工具,学习了!!!
上面两位是不是没认真看我提问内容,核心内容是读取输入流的工作被httpclient霸占了。
你应该用分段下载,多线程协作配合,就可以很快下载
下载代码别写在主线程就不卡了
我也试着实现consumer,但是没想象中那么好使。想在responseReceived里做过滤,然后再决定要不要下载数据;而实际情况是consumer处于被动回调,没有显式方法来反馈否定下载信号,即使是onsumeContent方法,ContentDecoder也有些预读,而且在确认要下载的情况下,该方法接受数据时都要反复地判断头部过滤。