最近给自己写了个类似迅雷的多线程下载程序(我用的是异步socket,严格来说并不是多线程的方式,应该算多任务),总结了下相关需求,主要如下:
下载功能(Core)
-
支持指定URL下载文件
-
支持实现自定义Refer、Cookie等Header
-
支持查询下载速度、文件大小
-
支持文件缓存功能。
-
下载完成后校验已经下载的文件大小是否等于远端文件大小(防止服务器端主动中断连接)
-
下载到同名文件智能重命名
-
支持失败重试
-
支持下载速度较慢时主动中断并重试
-
支持将较大的任务划分为多个子任务,子任务下载下载后能合并
-
支持子任务并发管理(最大并发数)
-
支持子任务失败策略(FailFast及IgnorFailure)
任务管理(Shell)
-
支持添加任务
-
支持删除任务
-
支持保存及恢复任务,下次启动时无需重新添加
-
支持停止正在下载的任务
-
支持显示任务状态:排队、下载中、失败、停止、完成
-
支持显示已完成的任务和已删除的任务
-
支持重新下载已完成、已停止、已删除的任务
-
支持改变任务位置
-
支持并发任务管理(最大并发数)
-
支持查询任务下载速度,文件大小,剩余下载时间,下载进度
-
有任务下载时阻止系统休眠,无任务下载时不能阻止系统休眠。
-
支持所有任务完成后自动关机
我这个程序是个即兴程序,写的时候倒并没有考虑那么多的需求,最开始连个界面都没有,只是个多线程下载的控制台程序,这些需求就是我在使用过程中逐步添加进来的,后续有更新再补充。
由于这个程序基本上是我想到哪儿写到哪儿的,可能需求列表并不完善,说明也比较粗略。但作为一个多线程下载程序还是有一定的参考意义的。