java 使用RandomAssessFile类多线程切片下载文件之服务端如何实现

本文介绍了如何使用Java结合多线程和RandomAccessFile类在服务端实现文件切片下载。通过获取客户端的Range请求头,服务端计算并返回指定范围的数据,解决切片下载问题。注意在计算实际读取大小时,要考虑到Range的包头包尾特性,避免字节缺失的bug。
摘要由CSDN通过智能技术生成

上一篇我写了如何使用 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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值