Android通过HTTP协议实现多线程下载
来源:互联网 发布:砸金蛋程序源码 编辑:程序博客网 时间:2024/05/18 07:15
import java.io.File;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;public class MulThreadDownload {/** * @param args */public static void main(String[] args) {String path = "http://net.itcast.cn/QQWubiSetup.exe";try {new MulThreadDownload().download(path, 3);} catch (Exception e) {e.printStackTrace();}}/** * 从路径中获取文件名称 * @param path 下载路径 * @return */public static String getFilename(String path){return path.substring(path.lastIndexOf('/')+1);}/** * 下载文件 * @param path 下载路径 * @param threadsize 线程数 */public void download(String path, int threadsize) throws Exception{URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);int filelength = conn.getContentLength();//获取要下载的文件的长度String filename = getFilename(path);//从路径中获取文件名称File saveFile = new File(filename);RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");accessFile.setLength(filelength);//设置本地文件的长度和下载文件相同accessFile.close();//计算每条线程下载的数据长度int block = filelength%threadsize==0? filelength/threadsize : filelength/threadsize+1;for(int threadid=0 ; threadid < threadsize ; threadid++){new DownloadThread(url, saveFile, block, threadid).start();}}private final class DownloadThread extends Thread{private URL url;private File saveFile;private int block;//每条线程下载的数据长度private int threadid;//线程idpublic DownloadThread(URL url, File saveFile, int block, int threadid) {this.url = url;this.saveFile = saveFile;this.block = block;this.threadid = threadid;}@Overridepublic void run() {//计算开始位置公式:线程id*每条线程下载的数据长度= ? //计算结束位置公式:(线程id +1)*每条线程下载的数据长度-1 =?int startposition = threadid * block;int endposition = (threadid + 1 ) * block - 1;try {RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");accessFile.seek(startposition);//设置从什么位置开始写入数据HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);conn.setRequestProperty("Range", "bytes="+ startposition+ "-"+ endposition);InputStream inStream = conn.getInputStream();byte[] buffer = new byte[1024];int len = 0;while( (len=inStream.read(buffer)) != -1 ){accessFile.write(buffer, 0, len);}inStream.close();accessFile.close();System.out.println("线程id:"+ threadid+ "下载完成");} catch (Exception e) {e.printStackTrace();}}}}
0 0
- Android--通过Http协议实现多线程下载
- Android通过HTTP协议实现多线程下载
- Android通过HTTP协议实现多线程下载
- Android通过HTTP协议实现多线程下载
- 通过HTTP协议实现多线程下载
- 通过HTTP协议实现多线程下载
- 通过HTTP协议实现多线程下载
- 通过HTTP协议实现多线程下载
- Android通过HTTP协议实现断点续传下载
- Android通过HTTP协议实现断点续传下载
- Android通过HTTP协议实现断点续传下载
- 在Android平台下通过HTTP协议实现断点续传下载。
- Android平台下通过HTTP协议实现断点续传下载
- android-- 通过HTTP协议实现断点续传下载
- android--http协议多线程断点续传下载的实现
- android--http协议多线程断点续传下载的实现
- Android下使用Http协议实现多线程断点续传下载
- Android 下使用 Http 协议实现多线程断点续传下载
- Qmake 多文件编译 在项目中的使用
- 相关子查询(correlated subquery) 与非相关子查询
- 【编程好习惯】使用空格增加可读性
- css 使用技巧
- 黑马程序员 Java基础知识总结-多线程
- Android通过HTTP协议实现多线程下载
- uitextField 设置边框颜色
- PN结
- hdu4279 找规律+小想法
- Android 编程下的代码混淆
- C++ Primer---- 奇怪的 protected 成员
- pat 1065
- 四周 项目4 扩展2 文件与工资操作
- 2011淘宝春季实习生招聘笔试题