美文网首页
分段下载实现总结

分段下载实现总结

作者: sgfb | 来源:发表于2020-03-13 15:19 被阅读0次

开篇

首先应该知道的是在正常情况下使用单线程下载和多线程下载结果是差不多的。所以通常情况下不一定要追求多线程下载使用简单有效的单线程可能会更好


正题

在开始多线程下载前得先得知下载文件的大小,如果在之前的流程中并没有告知文件大小则可以使用HTTP请求方法 HEAD,这个请求方法类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头,在头部中可以找到字段content-length就是文件大小了 返回的头部

得知文件长度后应分割需要下载的起止位置以便之后使用。
以图片里的文件为例,多线程数为2,那么就可以将文件下载分割为0-57186和57187-114373。

有具体位置后就可以启动多线程发送网络请求,在网络请求中使用HTTP协议的头部标志Range,这个标志的使用方法是Range:bytes=start-end。
对应刚才的例子两个网络请求的头部分别就是Range:bytes=0-57186和Range:bytes=57187-114373

最后以Java实现举例。Java默认的FileOutputStream只能覆盖或者接入文件尾部所以不能实现同时在不同位置写入。可以使用RandomAccessFile这个类可以跳到到指定的位置写入数据

参考博客
HTTP 请求头 Range

相关文章

  • 分段下载实现总结

    开篇 首先应该知道的是在正常情况下使用单线程下载和多线程下载结果是差不多的。所以通常情况下不一定要追求多线程下载使...

  • 分段下载

    php实现分段下载文件,有时文件比较大,或者难以迅速传输,而利用分段传输,可以实现稳定、高效并且有保障的传输,更具...

  • flutter分段下载Dio

    分块下载的最终速度受设备所在网络带宽、源出口速度、每个块大小、以及分块的数量等诸多因素影响,实际过程中很难保证速度...

  • python多线程实现S3文件分段上传下载

    对于大对象的存取,s3提供了分段上传/下载的接口,基于此,可以进一步实现多线程并行传输或者断点续传等功能。 本实现...

  • python多线程实现S3文件分段上传下载

    对于大对象的存取,s3提供了分段上传/下载的接口,基于此,可以进一步实现多线程并行传输或者断点续传等功能。 本实现...

  • iOS 13.0 添加UISegmentedControl 对图

    项目中经常遇到这种分割线隔开的分段按钮视图,将完美的实现方式总结记录一下(可以自定义视图,添加子视图的方式实现,但...

  • ConcurrentHashmap 小结

    并发包concurrent包下的ConcurrentHashmap 1.8以前是通过内部分段的方式实现内部分段,最...

  • Android中一些好用的框架

    本库主要提供一个简单易用的自定义分段控件,方便快速实现分段效果,支持xml配置、代码配置、分段规则按均分/比例分、...

  • JDK1.8 ConcurrentHashMap

    [toc] 前言 分析ConturrentHashMap 1.8的实现,JDK1.8实现屏蔽了Segment(分段...

  • 分段进度条&分段图标抖动动画的实现

    分段进度条&分段图标抖动动画的实现 先上图,https://github.com/Warkey1991/Jackv...

网友评论

      本文标题:分段下载实现总结

      本文链接:https://www.haomeiwen.com/subject/bzdkshtx.html