android 中斷點續傳理解

斷點續傳以前咱們首先須要瞭解http協議html

斷點續傳簡單的說,就是接着上一次的已經下載好的位置接着下載文件,如何接着之前已經下載的位置接着下載,這是咱們要解決的問題.java

http header詳解參考http://www.cnblogs.com/xyxiong/archive/2011/08/19/2145869.html服務器

解釋其中幾個用到的屬性:dom

Range : 用於客戶端到服務器端的請求,可經過該字段指定下載文件的某一段大小,及其單位。典型的格式如:
Range: bytes=0-499 下載第0-499字節範圍的內容
Range: bytes=500-999 下載第500-999字節範圍的內容
Range: bytes=-500 下載最後500字節的內容
Range: bytes=500- 下載從第500字節開始到文件結束部分的內容code

客戶端請求:htm

httpURLConnection.setRequestProperty("Range", "bytes="+12+"-");

 服務器響應:blog

Accept-Ranges : 用於服務器端到客戶端的應答,客戶端經過該字段能夠判斷服務器是否支持斷點續傳資源

Accept-Ranges: bytes 表示支持以bytes爲單位進行傳輸。
Accept-Ranges: none 表示不支持get

Content-Ranges : 用於服務器端到客戶端的應答,與Accept-Ranges在同一個報文內,經過該字段指定了返回的文件資源的字節範圍。格式以下:io

Content-Ranges: bytes 0-500/1234 大小爲1234的文件的第0-500字節範圍的內容
Content-Ranges: bytes 500-1233/1234 大小爲1234字節的文件的第500-結尾範圍的內容

ETag:簡單的說,ETag能夠用來標識/保證文件的惟一性或完整性,你能夠把它看做是服務器爲某個文件生產的惟一標識值,每次文件有更新該值就會變化。經過這種機制客戶端能夠檢查某個文件在斷點續傳(固然它不單單用於斷點續傳)的先後是否有所改動:若是ETag改變了就應該從新下載整個文件以保證它的完整性

String etag = httpURLConnection.getHeaderField("ETag");
String acceptRange= httpURLConnection.getHeaderField("Accept-Ranges");
String contentRange = httpURLConnection.getHeaderField("content-range");

 知道這些以後就能夠經過RandomAccessFile類進行斷點續傳了。

相關文章
相關標籤/搜索