android 断点续传下载简介

本文深入探讨了断点续传下载的原理,包括HTTP协议中Range头的使用,以及如何利用现成类库实现多线程断点下载。通过实例代码展示了如何设置请求头以获取指定范围的数据流,以及如何利用特定类库简化多线程下载过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、断点下载的原理

在此处,我们用 tomcat做为服务器,tomcat支持断点续传功能。

我们知道 Range: 用于客户端到服务器端的请求,可通过该字段指定下载文件的某一段大小,及其单位。

典型的格式如:
Range: bytes=0-499 下载第0-499字节范围的内容
Range: bytes=500-999 下载第500-999字节范围的内容
Range: bytes=-500 下载最后500字节的内容
Range: bytes=500- 下载从第500字节开始到文件结束部分的内容(这是最常用的一种格式)
Range: bytes=0-0,-1 下载第一以及最后一个字节的内容。

因此,我们可以知道只要向服务器发送http请求文件下载,在http的协议头上面,添加这个标签。接收的数据流就是这段的,字节的数据。

获取数据流的请求头:

//使用Get方式下载
				HttpURLConnection http = (HttpURLConnection) downUrl.openConnection();
				http.setConnectTimeout(5 * 1000);
				http.setRequestMethod("GET");
				http.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
				http.setRequestProperty("Accept-Language", "zh-CN");
				http.setRequestProperty("Referer", downUrl.toString()); 
				http.setRequestProperty("Charset", "UTF-8");
				
				int startPos = block * (threadId - 1) + downLength;//开始位置
				int endPos = block * threadId -1;//结束位置
				http.setRequestProperty("Range", "bytes=" + startPos + "-"+ endPos);//设置获取实体数据的范围
				http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
				http.setRequestProperty("Connection", "Keep-Alive");
				
				InputStream inStream = http.getInputStream();

这样,inStream的数据流,便是 发送到服务器请求要收到的数据流段。


这个,数据流,就可以这样 ,一个在服务器端,与客服端的数据流的相对应的数据流的段流动。(这个range就是key)。

2、用现成的类库,简单的调用多线程断点下载。

FileDownloader loaDownloader=new FileDownloader(getApplicationContext(), filePathUrl, sdcard, 5);
			progressBar.setMax(loaDownloader.getFileSize());
			
			//textView.setText(text)
			try {
				loaDownloader.download(new DownloadProgressListener() {
					public void onDownloadSize(int size) {
						Message msg = new Message();
						msg.what = 1;
						msg.getData().putInt("size", size);
						handler.sendMessage(msg);//发送消息
					}
				});
				
			} catch (Exception e) {
				// TODO: handle exception
			}


svn服务器代码位置:http://my-project-android2012.googlecode.com/svn/MulThreadDownloader/


参考:

Android之断点续传下载

说说Android上的断点续传下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值