上一篇我写了如何使用 java 结合网络连接+多线程+RandomAssessFile类实现多线程切片下载并显示网速https://blog.csdn.net/yali_aini/article/details/81942036
因为之前写的都是客户端,不需要去管服务端,直接把文件放服务器里面,直接访问,服务器(tomcat之类得)就会自动帮我们切片,之类的。然后我自己想测试一些直接访问文件和使用控制器io读写返回文件哪个快一些(肯定是io)https://blog.csdn.net/yali_aini/article/details/81745883,然后测试,发现按照我之前的写法无法做到切片下载,研究了下,解决了这个问题,所以拿出来分享下。
我们都知道,客户端下载的时候设置了 请求头文件,设置了 range 请求范围,服务器端获取范围,返回范围段内的数据就ok了
这里得注意点,因为 rang读取是包头包尾的,如果 1-2 读取的就是 2 个,直接 2-1 的话就是一个,所以这里计算真实读取大小的时候得加个1,不然就会出现 读取少了字节得bug。
代码不怎么难,一起看看把,注意看注释,思路就是我上面说的,获取客户端请求得 range,然后按照范围去读取数据,然后返回就ok了
@RequestMapping("/downloadFile"