IOS网络篇17之分段下载、断点续传解析

来源:互联网 发布:初中网络课程 编辑:程序博客网 时间:2024/06/06 16:34

分段下载:

下面跟随分段下载的实现步骤来了解一下分段下载的原理:

(1)下载功能一般都是在子线程中实现的,因此首先我们要先创建一个子线程。

比如我们可以使用GCD中的串行异步:

    dispatch_queue_t q =dispatch_queue_create("com.zhengwei.download",DISPATCH_QUEUE_SERIAL);

    

    dispatch_async(q, ^{

});

(2)获取所要下载的文件大小

NSURLConnection + NSMutableURLRequest 可以让我们只获取http的头信息。头信息中一般包含数据的一些基本信息。

通过

request.HTTPMethod =@"HEAD";

[NSURLConnectionsendSynchronousRequest:requestreturningResponse:&responseerror:NULL];

我们只对网络数据的head进行请求,请求的返回内容都放在response中,下面是NSURLResponse的各种属性:


可以吧文件保存成各种类型的,当然如果不指定后缀名,就保存成了一个没有后缀名的文件。

(3)查看文件是否存在,并获取存在文件的大小

NSFileManager 可以对文件判断是否存在

(4)如果文件大小和下载的相同,那么利用缓存,不下载新的图片。利用图片的路径初始化图片如果不想等,那么开始图片下载。

(5)调用循环开始不断的下载文件。

这里文件下载可以使用

[request setValue:rangeforHTTPHeaderField:@"Range"];

设置下载请求的Range范围,指定下载某一部分图片。

(6)对文件分段写入

NSFileHandle

这个对象有几个方法:

- (void)writeData:(NSData *)data;

- (unsignedlonglong)seekToEndOfFile;

- (void)seekToFileOffset:(unsignedlonglong)offset;


可以指定从文件的哪一部分开始写入。

(7)断点续传

对每一个数据块设置一个标示符号。如果这段的数据的标示符号表明这个数据块已经被写完,那么就不用对这个数据快请求。否则遍历文件中的所有数据块,知道所有的数据块的表示符号都下完数据为止。




0 0