Java多线程断点下载分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程断点下载分析相关的知识,希望对你有一定的参考价值。

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;

以上是关于Java多线程断点下载分析的主要内容,如果未能解决你的问题,请参考以下文章

java多线程断点下载原理(代码实例演示)

Java多线程断点下载文件并压缩

Java实现多线程下载断点续传

Android多线程断点下载的代码流程解析

JAVA下实现多线程断点下载

java多线程下载文件和断点下载