关于百度网盘中多文件打包下载并支持断点续传的技术实现

三千水军保裆 发布于 2018/05/12 20:49
阅读 2K+
收藏 0

今天发现百度网盘中觉得一个很牛的功能,多文件打包下载并支持多线程以及断点续传

单从多文件打包下载这一点来说,实现起来很容易,创建一个压缩输出流即可:

OutputStream out = response.getOutputStream();
ZipArchiveOutputStream zipArchiveOutputStream = new ZipArchiveOutputStream(out);

但是这样只能进行单线程下载,并且不能实现断点续传。

在我的理解中,实现多线程以及断点续传需要对文件进行随机访问,难道百度是在下载前对需要下载的文件进行打包再下载吗?如果是这样,那这个过程应该会很长,但实际上选择文件之后点下载,网盘的反应是非常快的。所以对他的实现比较好奇,有懂的大神吗?还望给小弟解解惑,谢谢!

加载中
0
sdvdxl
sdvdxl
文件打包是网盘云端做的,这个可以做成边打包边发送数据流,这样就是你看到的很快的现象。断点续传和多线程下载是下载工具的功能,跟云端没有关系
三千水军保裆
三千水军保裆
额。断点续传和多线程下载当然要云端支持啊。。。
0
kakai
kakai

打包我就不说了。http就有断点续传的功能,当然,下载客户端要保存当前已下载的字节数以作为服务器续传的起始字节进行继续传输。你看很多下载器都会在本地生成一个缓冲文件,基本这个文件就是保存已下载的字节。

kakai
kakai
回复 @三千水军保裆 : 它这个压缩我不明白,zip相对组织压缩包应该比较快,组织完即刻进行流式传输,我猜测,不一定是真理,哈哈。
三千水军保裆
三千水军保裆
回复 @BoXuan : github网站中Download ZIP不支持断点续传以及多线程的
三千水军保裆
三千水军保裆
回复 @BoXuan : 原理是这样的,常规的断点下载、以及多线程的功能我也做过!通过http请求头的range参数进行文件的随机访问并返回每个文件区间流;但是你发现没,很短的时间之内百度居然确定了压缩流的大小,这个不知道怎么实现的噢
kakai
kakai
回复 @三千水军保裆 : 你想复杂了,顺序流式下载其实不难,像迅雷的那种随机下载我就不懂了,我原来用TCP实现过下载的断点续传,http是基于tcp协议的,它的下载也是顺序流式下载,不过它会把大的字节流分割为小的区块上传,这就是它的chunk机制。
三千水军保裆
三千水军保裆
远没有这么简单
返回顶部
顶部