开发者社区> 问答> 正文

各位大神 我在下载文件的时候要把输入流写到response的输出流里 但是写入速度太慢了 导致接口相应速度很慢 有什么好办法么?

各位大神 我在下载文件的时候要把输入流写到response的输出流里 但是写入速度太慢了 导致接口相应速度很慢 有什么好办法么?
_1

展开
收起
李博 bluemind 2019-03-06 17:42:52 7549 0
4 条回答
写回答
取消 提交回答
  • 你可以把下载过程想象成一根水管,然后有两个端口,一个是进水口(inputstream.read),一个是出水口(outputstream.write)。
    ok,然后你需要判断,慢究竟是发生在哪里。
    如果是进水口,可以看一下你5m的缓冲区是否对实际的硬件压力太大,比如磁盘io跟不上,如果是出水口,通常是网络原因,如果是网速限制那无能为力,如果是单线程带宽限制,可以尝试多线程。

    2019-07-17 23:30:18
    赞同 1 展开评论 打赏
  • httpResponse有一种chunked编码,可以便写入边传输,不用等流全部读完

    2019-07-17 23:30:18
    赞同 展开评论 打赏
  • 是不是文件比较大,响应速度指的是首次有数据返回,还是完全下载完成的时间?
    可以试试缓存小一点,5M对于网络而言还是有点大。
    比如设定256K的buf,然后每次写出后主动调用一次flush将少量数据推送到浏览器。
    这样浏览器可以出现进度条,避免下载有卡顿感。
    如果浏览器没有出现进度条,说明你忘记写出文件总大小到header里面了。
    先写出文件总体大小到header,再write数据流,浏览器就会很快反应并且有下载进度提示了。

    2019-07-17 23:30:18
    赞同 展开评论 打赏
  • 可以拆成两个接口,
    第一个接口负责下发请求,立即返回,例如插入到中间表
    第二个接口负责查询完整情况

    后端有一个线程读取中间表,消费处理

    2019-07-17 23:30:18
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载