现在网络上关于Android下载的代码很多,但是光看还是无法完全理解和掌握,所以决定自己手写一个,以加深学习。
在写下载代码之前,有几点知识必须要掌握:
1.Http请求报文格式及响应报文,可以通过使用wireshark来对报文进行抓取,查看http协议的报文
2.HttpUrlConnection的使用
3.RandomAccessFile类的使用(可断点下载)
这里写的下载是关于断点下载的。
断点下载的原理就是在请求报文中加入Range:bytes=x-y 其中x表示开始下载的位置,y表示下载到的位置,y可省略,表示到文件结尾。例如:0- 表示从文件的开头一直读到结尾。
多线程下载页是基于这个原理。例如有三个线程。文件大小为600;则:
线程1:Range:bytes=0-199;
线程2:Range:bytes=200-399;
线程3:Range:bytes=400-
建立起连接之后,获取输入流:
in=con.getInputStream();
然后利用RandomAccessFile类就行写出。这个类可以随机写入文件,通过seek方法定位到要写的位置,然后通过write方法进行写出。代码如下
public class DownLoadUtil {
private static DownLoadUtil downLoadUtil;
private int readTimeOut = 6 * 1000;//