Android 文件断点续传
来源:互联网 发布:linux启动登录oracle 编辑:程序博客网 时间:2024/06/03 21:44
原创文章,如有转载,请注明出处:http://blog.csdn.net/myth13141314/article/details/69364126
主要有几个关键点
- 一个是文件下载暂停以后保存状态,包括文件总的大小,下载到哪里了
- 一个是重新下载的时候怎么继续下载,就是要设置网络请求,让服务器返回剩下的文件
- 再一个就是怎么把新下载的文件,接着上次下载暂停的位置继续保存
下面分别分析下思路,先贴段简单的下载代码
public static void sendHttpRequest(final String address, final HttpCallbackListener listener) { new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL(address); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response =new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } in.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } } }).start();}
下载暂停时,保存文件状态,一般保存到数据库
- 主要是保存文件大小
long filelength = connection.getContentLength();
怎么让服务器接着下载呢
- 主要用到的是HttpURLConnection 的setRequestProperty()方法
connection.setRequestProperty("Range", "bytes=" + lastPostion + "-" + endposition);
- 通过设置“Range”属性,可以让服务器从文件的特定位置开始返回数据,返回的位置即为”bytes=”的值,上面就是从lastPostion 开始返回,到endposition结束
- 设置了“Range”属性以后,请求成功的返回码变为206,即connection.getResponseCode()=206,而不再是200
从服务器获取了剩余的文件以后怎么写入已经下载的文件呢?即从暂停的地方开始写入
- 主要用到的是 IO 包中的 RandAccessFile 类
- RandAccessFile 类有个setLength()方法,可以直接设置RandomAccessFile文件的长度。还有个seek()方法,可以直接设定从文件的哪个位置开始写入文件。
RandomAccess accessFile = new RandomAccessFile("down.zip","rw"); // 定位文件指针到 lastPostion 位置 accessFile .seek(lastPostion ); byte[] b = new byte[1024]; int nRead; // 从输入流中读入字节流,然后写到文件中 while((nRead=input.read(b,0,1024)) > 0) { accessFile .write(b,0,nRead); }
以上只是对断点续传的原理的简单分析
0 0
- Android 文件断点续传
- android udp文件断点续传
- android断点续传下载文件
- Android 文件断点续传
- Android之文件断点续传
- Android实现文件下载断点续传
- Android文件下载之断点续传
- Android 文件多线程断点续传下载
- android大文件上传断点续传
- Android多线程断点续传下载文件类设计
- Android开发文件下载中的断点续传源码
- Android文件下载(实现断点续传)
- Android多线程断点续传下载文件类设计
- Android网络编程 --断点续传下载文件
- Android 文件下载,断点续传,进度更新
- Android实现断点续传下载文件,网络编程
- Android网络编程 --断点续传下载文件
- Android网络编程 --断点续传下载文件
- 无聊之时打了个菱形
- Android代码规范
- Machine Learning with Scikit-Learn and Tensorflow 7.2 Bagging和Pasting
- Keepalived+Nginx实现高可用(HA)
- hive 复制整段语句是出现 Display all 475 possibilities? (y or n)错误的处理方法
- Android 文件断点续传
- JAVA中的StringBuffer
- react native 带索引的城市列表
- 算法训练 乘法表
- PHP require、include的区别
- [Leetcode]_12 Integer to Roman
- 五六单元练习
- 正则化,归一化和标准化
- 【C++】浅谈boost库智能指针