下载原理逻辑概要

下载首方法
下载原理
if(data文件存在){
if(不是新任务){
if(cfg可读){
//cfg的优先级高于文件名所包含的意义
if(cfg是多块){
检查data文件名是否符合要求
开子线程下载
return;
}else if(cfg是1块){
检查data文件名是否符合要求
需要固定块为1;
goto下载体();
}
}else if(cfg不可读){
if(文件名标识分1块){
需要固定块为1;
}else{
需要重新分块 ,检查后分块可能与过去不同,导致下载不一致
检查data文件名是否符合要求
需要重新请求p2sp
}
goto下载体();
}
}else if(新任务){
需要重新分块
创建符合要求的data文件
需要重新请求p2sp
}
}else if(data文件不存在){
需要重新分块
创建符合要求的data文件
需要重新请求p2sp
}
下载方式:
1.单块时,仅首线程下载
2.多块时,首线程+其他子线程下载
3.多块时如果获取到p2sp时,其他子线程下载。(同时停止首线程)
下载体(){
获取流{
if(流==null){
网络错误
return;
}
}
if(固定块为1){
初始化块信息
}else if(需要重新分块){
重新分块
}
if(文件创建以及修改文件名处理){
修改了文件名后,同时需要修改cfg文件名

}
if(需要请求p2sp){
线程中请求p2sp
if(请求到p2sp){
暂停下载,删除文件,初始化变量(不需要请求p2sp,需要重新分块,UI等待处理(进度条不能回退)等等),重新下载
}
开启多线程下载
}
if(如果块为0,则获取不到长度 标识不能断点下载){
开始不能暂停的下载,改变名称符合固定为1块的下载
}else if(固定块为1或者块为1){
开始同上 改变名称符合固定为1块的下载
}else{
if(不需要请求p2sp){
开启除第一个子线程外的线程 开始下载
}
}
if(文件创建以及修改文件名处理){
修改了文件名后,同时需要修改cfg文件名

}

开始首线程的下载;

}
其他说明:
判断文件下载完成说明:
单块下载时,文件大小大于等于总大小
多块下载时,多块下载完成或者多块下载总和大于等于总大小
单块下载时 以cfg 和文件大小中最小的为准
多块下载时 以cfg文件中保存的大小为准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值