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

goto-array 发布于 2015/03/21 17:11
阅读 3K+
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

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

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

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


有办法禁止预下载么?


加载中
0
bug操手
bug操手
该评论暂时无法显示,详情咨询 QQ 群:点此入群
goto-array
goto-array
我也试着实现consumer,但是没想象中那么好使。想在responseReceived里做过滤,然后再决定要不要下载数据;而实际情况是consumer处于被动回调,没有显式方法来反馈否定下载信号,即使是onsumeContent方法,ContentDecoder也有些预读,而且在确认要下载的情况下,该方法接受数据时都要反复地判断头部过滤。
0
灵魂架构师
灵魂架构师

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


0
lance117
lance117
你应该用分段下载,多线程协作配合,就可以很快下载
0
goto-array
goto-array
上面两位是不是没认真看我提问内容,核心内容是读取输入流的工作被httpclient霸占了。
0
goto-array
goto-array
该评论暂时无法显示,详情咨询 QQ 群:点此入群
bug操手
bug操手
Good!!! 我没用过这个工具,学习了!!!
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部