码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程断点下载分析

时间:2016-02-26 20:41:38      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

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多线程断点下载分析

标签:

原文地址:http://www.cnblogs.com/rsnote/p/5221592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!