您的位置:首页 > 理论基础 > 计算机网络

HttpClientGetPost_MultiThreading_ResumeFromBreakPoint

2016-05-05 12:26 363 查看

HttpClient

HttpClient是Apache Jakarta Common下的子项目

GET方法和POST提交数据

示例工程名 : HttpClient_GET_POST

使用第三方Http异步连接库 AsyncHttpClient

示例工程名 : UseAsyncHttpClient

多线程断点续传下载

示例工程名 : MulThreadResumeDown

多线程和断点续传的原理 : 要实现HTTP断点续传,Web服务器必须支持HTTP/1.1(相对于HTTP/1.0老版本)。HTTP请求是有一个Header的,里面有个Range属性是定义下载区域的,它接收的值是一个区间范围,比如:Range:bytes=0-10000。这样我们就可以按照一定的规则,将一个大文件拆分为若干部分,然后用多线程下载,每个小块下载完成之后,再合并到文件中;在下载的过程中不断记录下载的进度,这样即使下载中断了,重新下载时,也可以通过记录的进度判断下载的起始点,然后重启断点续传的过程,直到最后完成下载过程。

知道为啥说“安卓是基于Java的”吗?就现在这个功能来说,可以先用java工程来写,然后将代码粘贴进安卓框架中,就能运行了。

多线程

快的原因 : 抢占服务器的资源

下载初始就会先创建一个临时文件,占用硬盘文件大小的空间,以防硬盘在下载时在文件的占用空间部分写入文件而导致文件零碎。

int filenameindex = urlStr.lastIndexOf("/");
File file = new File(urlStr.substring(filenameindex + 1));
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.setLength(length);
raf.close();


在获取输入流的时候 , 获取指定区间的数据输入流。

conn.setRequestProperty("Range", "bytes=" + startIndex + "-" + endIndex);
if (conn.getResponseCode() == HttpURLConnection.HTTP_PARTIAL) {
InputStream is = conn.getInputStream();


硬盘的写入并不是有数据就直接写到硬盘上,而是先保存到缓冲区, 然后达到一定量之后一次写到硬盘上(电信号到磁信号)。你可以想像如果没有磁盘缓冲区 ,就会要求每传一个字(通常是4字节)就需要读一次磁盘或写一次磁盘。

硬盘/SSD 硬件参数里面都有缓存一说 ,有些SSD为么可以没有缓存? 缓存算法对读写数据速率的影响。

在迅雷下载器中,有“磁盘缓存设置”项 ,内含“最小缓存”和“最大缓存” , 啥意思?

File.delete()失败的原因

没有close关闭和该文件相关的所有输入输出流等

setProgress 可以放在非UI线程中 使用

在这里使用Thread 和 Runnable的区别?

http://www.oschina.net/question/565065_86563


多线程的暂停 wait 和 notify 需要配合 synchronized 使用

http://my.oschina.net/reesechou/blog/466585


http://www.cnblogs.com/springcsc/archive/2009/12/03/1616394.html


示例工程名: MulThreadControl (多个线程输出提示信息;通过点击按钮来暂停或者开始输出提示信息)

使用Xutils实现多线程断点续传

示例工程名 : UseXutilsForMulThreadDownLoad

通过获取网络连接响应头中包含的文件名 ,作为本地文件名(看看这个开源项目是怎么实现这个功能的)

这个下载速度真的是飞速呀!!! 跟自己写的下载器的下载速度完全是天地之别呀!!!

在eclipse中关联第三方jar包源码的方法 : (第三方jar包是放在libs目录下的)

右键jar,选择“Build Path” - “Configure Build Path” , 在右侧的libraries也下, 选择自己的第三方jar包 , 有下级目录“Source attachment” , 选中之后, 看看旁边的“Edit”是否可点击,可点击选中源码目录即可

假如我的jar包名字是
xUtils-2.6.14.jar
, 我要关联的源码路径是
D:\library
(路径中不能包含中文) 。在libs目录下,创建一个文件(File), 文件名为
xUtils-2.6.14.jar.properties
, 编辑该文件,文件内容为
src=D:\\library
(比源码路径多个斜杠是因为要转义) , 然后保存,重启eclipse , ok搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: