斷點續傳以前咱們首先須要瞭解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 表示不支持getContent-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類進行斷點續傳了。