1、主函数main()——调用抽象类DownloadUtils.java,传入参数:url、fileName、filePath、threadNum
2、DownloadUtils.java——是抽象类,download()为抽象方法,根据传入的参数选择调用的方法
2.1、创建DownloadInfo.java类的实例bean;
DownloadInfo bean = new DownloadInof(url,fileName,filePath,threadNum);
2.2、通过LogUtils.java类的info()方法输出相关信息;
LogUtils.info(bean);
2.3、用DownloadInfo.java的实力bean创建BatchDownloadFile.java类的实例down
BatchDownloadFile down = new BatchDownloadFile(bean);
2.4、创建线程并开始
new Thread(down).start();
3、DownloadInfo.java——描述下载文件的相关信息
3.1、文件的信息包括:url、fileName、filePath、splitter、默认保存路径FILE_PATH、默认分块数SPLITTER_NUM
3.2、创建构造方法:根据传入的参数个数创建3个构造方法
DownloadInfo(String url)
DownloadInfo(String url,int splitter)
DownloadInfo(String url,String fileName,String filePath,int splitter)
构造函数中,将传入的参数赋值给变量时,需要判断对应参数是否为空,并对它为空的情况下做出相应处理:
- url为空时,报RuntimeException错误;
- fileName为空时,通过getFileName(String url)方法获取链接中的文件名;
- filePath为空时,使用默认保存路径;
- splitter为空时,使用默认分块数;
3.3、对变量添加get()和set()方法
4、BatchDownloadFile.java——实现Runnable接口,重写run()方法
4.1、类的作用:
- 完成读取指定url资源的内容,并获取该资源的长度;
- 将该资源分成指定的快数,并将每块的起始下载位置、结束下载位置分别保存在数组中;
- 每块都单独开辟一个独立线程开始下载;
- 开始下载前,需要创建一个临时文件,写入当前下载线程的开始下载指针位置和结束下载指针位置;
4.2、构造函数:BatchDownload(DownloadInfo downloadInfo)
4.2.1、临时文件保存路径tempPath:根据传入的downloadInfo获得临时文件保存路径;
4.2.2、创建临时文件tempFile:根据tempPath创建File的实例tempFile;
4.2.3、判断是否存在读入点位置的文件
若有,则通过readPosInfo()方法读取内容;
若无,则根据downloadIno的分块数,创建起始下载点位置数组和结束下载位置数组,数组长度为分块数;
4.3、readPosInfo()方法——读取临时文件中的写入点的位置信息
4.3.1、通过tempFile创建FileInputStream实例;
4.3.2、通过上一步生成的FileInputStream创建DataInputStream实例dis;