andriod 断点下载
来源:互联网 发布:勇士队球员得分数据 编辑:程序博客网 时间:2024/04/29 02:55
以前没有用过断点下载,觉着这个东西非常高深,经高人指点后,觉着并没有那么难。ps:项目用的是高人封装的httputils,但是没有封装断点下载。
原理如下:
startProgress :断点的位置
①:在请求的head中添加 .addHeader(“RANGE”, “bytes=” + startProgress + “-“)
②:RandomAccessFile 的feek(startProgress )跳转到断点位置
RandomAccessFile randomAccessFile;
if(randomAccessFile==null){
randomAccessFile = new RandomAccessFile(file,”rw”);
}
randomAccessFile.seek(startPosition);
⑤:用RandomAccessFile 写入文件
具体实现:(自定义httputils下载的callback)
public abstract class MyFileCallBack extends Callback<File> { /** * 目标文件存储的文件夹路径 */ private String destFileDir; /** * 目标文件存储的文件名 */ private String destFileName; private long startPosition; private RandomAccessFile randomAccessFile; public MyFileCallBack(String destFileDir, String destFileName,long startPosition) { this.destFileDir = destFileDir; this.destFileName = destFileName; this.startPosition=startPosition; } @Override public File parseNetworkResponse(Response response, int id) throws Exception { return saveFile(response,id); } public File saveFile(Response response,final int id) throws IOException { InputStream is = null; byte[] buf = new byte[2048]; // int len = 0; // FileOutputStream fos = null; try { is = response.body().byteStream(); final long total = response.body().contentLength(); long sum = 0; File dir = new File(destFileDir); if (!dir.exists()) { dir.mkdirs(); } File file = new File(dir, destFileName); if(randomAccessFile==null){ randomAccessFile = new RandomAccessFile(file,"rw"); } randomAccessFile.seek(startPosition); int len; while ((len = is.read(buf)) != -1) { sum += len; randomAccessFile.write(buf, 0, len); final long finalSum = sum; OkHttpUtils.getInstance().getDelivery().execute(new Runnable() { @Override public void run() { inProgress(finalSum * 1.0f / total,total,id); } }); } return file; } finally { try { response.body().close(); if (is != null) is.close(); if( randomAccessFile!=null){ randomAccessFile.close(); } } catch (IOException e) { } } }}
0 0
- andriod 断点下载
- Andriod 实现多线程断点下载demo
- 断点下载
- 断点下载
- 断点下载
- 断点下载
- 多线程下载断点下载
- NSURLSessionDownloadTask 下载/断点下载
- 多线程下载,断点下载
- Andriod系统概述下载
- Andriod SDK下载地址
- 下载编译andriod kernel
- andriod源代码下载
- andriod 源码下载
- Symbian 断点下载
- java 多线程断点下载
- J2ME断点下载文件
- 网络多线程断点下载
- 获取验证码倒计时
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
- Linux运维工程师真实的工作状态到底是怎么样的?
- Android自定义View基础(三)-颜色
- Android MVVM Architecture
- andriod 断点下载
- c语言中,结构体做参数调用例子结构体形参例子
- 巴爷微信商城
- C#语言编写代码逻辑
- spring AOP 为系统增加操作日志
- https-ssl-nginx-apache-httpd-tomat申请ssl证书小结
- Emacs v25.1 win7 卡顿
- 电话相关操作
- CRC校验原理及查表码表由来