开发者社区> 问答> 正文

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

李博 bluemind 2019-03-06 17:42:52 668

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

分享到
取消 提交回答
全部回答(4)
  • 1752577857709117
    2019-07-17 23:30:18

    你可以把下载过程想象成一根水管,然后有两个端口,一个是进水口(inputstream.read),一个是出水口(outputstream.write)。
    ok,然后你需要判断,慢究竟是发生在哪里。
    如果是进水口,可以看一下你5m的缓冲区是否对实际的硬件压力太大,比如磁盘io跟不上,如果是出水口,通常是网络原因,如果是网速限制那无能为力,如果是单线程带宽限制,可以尝试多线程。

    0 0
  • 南极小企鹅
    2019-07-17 23:30:18

    httpResponse有一种chunked编码,可以便写入边传输,不用等流全部读完

    0 0
  • seesaw
    2019-07-17 23:30:18

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

    0 0
  • orange_815
    2019-07-17 23:30:18

    可以拆成两个接口,
    第一个接口负责下发请求,立即返回,例如插入到中间表
    第二个接口负责查询完整情况

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

    0 0
添加回答
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章