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搞定。
相关文章推荐
- 使用ntopng,在Linux上搭建基于Web的网络流量监控系统
- HTTP详解(3)-http1.0 和http1.1 区别
- HTTP详解(1)-工作原理
- HTTP详解(2)-请求、响应、缓存
- Python实现HTTP-Basic认证登陆
- springmvc 实现http接口 接受json参数
- 使用GraphViz画caffe网络结构图
- Windows7如何实现笔记本电脑无线网络共享的详细图文教程
- 两大Http外交官HttpURLConnection和HttpClient(一)
- 机器学习中使用神经网络第三讲笔记
- 使用C#的HttpWebRequest模拟登陆网站
- 情感分析︱网络公开的免费文本语料训练数据集汇总
- http协议详解
- SOCKET API和TCP STATE的对应关系
- TCPClient为远程和本地设置端口和IP
- HTTP 响应头信息
- HTTP 响应头信息
- TCP拥塞控制
- 移动网络简介与RRC
- 网络游戏的对时以及同步问题 云风的 BLOG