各位大神 我在下载文件的时候要把输入流写到response的输出流里 但是写入速度太慢了 导致接口相应速度很慢 有什么好办法么?
你可以把下载过程想象成一根水管,然后有两个端口,一个是进水口(inputstream.read),一个是出水口(outputstream.write)。
ok,然后你需要判断,慢究竟是发生在哪里。
如果是进水口,可以看一下你5m的缓冲区是否对实际的硬件压力太大,比如磁盘io跟不上,如果是出水口,通常是网络原因,如果是网速限制那无能为力,如果是单线程带宽限制,可以尝试多线程。
是不是文件比较大,响应速度指的是首次有数据返回,还是完全下载完成的时间?
可以试试缓存小一点,5M对于网络而言还是有点大。
比如设定256K的buf,然后每次写出后主动调用一次flush将少量数据推送到浏览器。
这样浏览器可以出现进度条,避免下载有卡顿感。
如果浏览器没有出现进度条,说明你忘记写出文件总大小到header里面了。
先写出文件总体大小到header,再write数据流,浏览器就会很快反应并且有下载进度提示了。
可以拆成两个接口,
第一个接口负责下发请求,立即返回,例如插入到中间表
第二个接口负责查询完整情况
后端有一个线程读取中间表,消费处理
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。