Android开发之多线程下载文件

来源:互联网 发布:mac百度云下载没反应 编辑:程序博客网 时间:2024/05/22 09:45

学习了两年多的java ,一直也没有接触过多线程并发的使用感觉自己真的很无知,知道学习了Android后才知道原理是啥,感觉自己也是很可笑。

知道原理就行了代码我就不往上贴了:

(1)首先通过HTTP请求获得下载文件的长度,通过httpURLconnecttion .contentLength()方法获取文件的大小,然后在本地的位置创建同样大小的新文件(使用RandomAccessFile类)。

(2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置。

例如10M大小,使用3个线程来下载,
线程下载的数据长度 (10%3 == 0 ? 10/3:10/3+1) ,第1,2个线程下载长度是4M,第三个线程下载长度为2M
下载开始位置:线程id*每条线程下载的数据长度 = ?
下载结束位置:(线程id+1)*每条线程下载的数据长度-1=?
根椐 (10%3 == 0 ? 10/3:10/3+1) 计算出来blockSize (每个线程应该下载部分的大小)

int startPos = blockSize * (threadId - 1);//开始位置
int endPos = blockSize * threadId - 1;//结束位置
然后再计算每个线程应该会截取这个文件的不同位置进行下载,最后再组装成一个完整的文件

具体的代码http://blog.csdn.net/mad1989/article/details/38421465

0 0
原创粉丝点击