Skip to content
java多线程队列下载,支持断点续传,大文件切割下载
Java
Branch: master
Clone or download

Latest commit

Latest commit d215d03 Mar 25, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings
bin/com/c3/fastdownload
src/com/c3/fastdownload
.classpath
.project
README.md
fastdownload.jar
pom.xml

README.md

FastDownload

java多线程队列下载,支持断点续传,大文件切割下载
GitHub Pages: https://github.com/fengshangbin/FastDownload

功能

  • 多线程队列下载
  • 断点续传
  • 大文件切割块下载

设计理念

专注下载核心功能,提供UI状态回调,功能全面,使用简单

依赖

okhttp3(com.squareup.okhttp3), json(org.json.json)

初始化

实现持久化接口,以便能缓存下载进度,下面以Android为例

CacheInterface cache = new CacheInterface() {
    @Override
    public String read() {
    	SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString("downloadBreakPoint","");
    }

    @Override
    public void write(String data) {
    	SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("downloadBreakPoint", data);
        editor.commit();
    }
};
DownloadBreakPoint.setCacheInterface(cache);

调用

设置需要下载的资源列表

ArrayList<Resource> resources = new ArrayList<>();
String sourceURL = "https://csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js";
String savePath = IOUtils.getAppDir() + "/jq.js";
String md5 = "ODdx7xaSv8w/K2kXyphXeA==";
long size = 92633L;
/*
@sourceURL 资源下载地址
@savePath 资源本地保存路径
@md5 资源哈希md5值
@size 资源大小
*/
Resource resource = new Resource(sourceURL, savePath, md5, size, null);
resources.add(resource);

监听下载状态

DownloadProgress downloadProgress = new DownloadProgress() {
	@Override
    protected synchronized void onDownloadChange() {
        //Message.sent(SynchronousHandler.CHANGE_LOADING, new long[]{this.getLoaded(), this.getTotal()});
    }

    @Override
    protected synchronized void onDownloadFailed(Resource resource) {
        //Log.i("c3","failed: "+resource.getPath());
    }

    @Override
    protected synchronized void onDownloadSuccess(Resource resource) {
        //Log.i("c3","success: "+resource.getPath());
    }

    @Override
    protected void onDownloadFinish() { 
    	//下载队列执行完成 包括成功和失败的任务
        //Log.i("c3","download all finish.");
    }
};

构建下载任务

int nThreads = 5;
Long chunkSize = 5*1024*1024L;
/*
@nThreads 多线程数量上限
@chunkSize 资源切割块大小
*/
BatchDownload batchDownload = BatchDownload.build(resources, downloadProgress, nThreads, chunkSize);

OK, 这样就完成了调用
如果需要动态执行下载任务可以

batchDownload.download(resource);
You can’t perform that action at this time.