HttpClient发送请求下载大文件时一直阻塞,直到下载完后才执行代码

发布于 2021-11-27 10:43:57 字数 415 浏览 741 评论 5

目前在用asyncClient,使用Future接口阻塞线程获取HttpResponse,然后getEntity().getContent()读取字节流。

测试时都是找各种图片的URL,阻塞时间有些长,开头我还以为是本地网络有些延迟。

代码写得差不多的时候,拿大文件的URL去测试,看着流量监控,数据一直在下载,而程序一直没响应。。。代码里设有时间限制,都直接给抛出超时异常了。主线程没结束,但asyncClient依然下载那些数据。。。假如我只想获取HTTP响应头部,甚至要有过滤,那岂不是在浪费时间?


有办法禁止预下载么?


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

筱果果 2021-11-29 17:52:46

Good!!! 我没用过这个工具,学习了!!!

复古式 2021-11-29 15:32:35

上面两位是不是没认真看我提问内容,核心内容是读取输入流的工作被httpclient霸占了。

绝影如岚 2021-11-29 15:11:17

你应该用分段下载,多线程协作配合,就可以很快下载

南冥有猫 2021-11-29 06:47:53

下载代码别写在主线程就不卡了

眼泪淡了忧伤 2021-11-27 16:20:21

我也试着实现consumer,但是没想象中那么好使。想在responseReceived里做过滤,然后再决定要不要下载数据;而实际情况是consumer处于被动回调,没有显式方法来反馈否定下载信号,即使是onsumeContent方法,ContentDecoder也有些预读,而且在确认要下载的情况下,该方法接受数据时都要反复地判断头部过滤。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文