国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用Java實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳

2019-11-18 15:38:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  (一)斷點(diǎn)續(xù)傳的原理

  其實(shí)斷點(diǎn)續(xù)傳的原理很簡(jiǎn)單,就是在Http的請(qǐng)求上和一般的下載有所不同而已。打個(gè)比方,瀏覽器請(qǐng)求服務(wù)器上的一個(gè)文時(shí),所發(fā)出的請(qǐng)求如下:

  假設(shè)服務(wù)器域名為wwww.sjtu.edu.cn,文件名為down.zip

GET /down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
Excel, application/msWord, application/vnd.ms-Powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive



  服務(wù)器收到請(qǐng)求后,按要求尋找請(qǐng)求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下:

200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 APR 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
  所謂斷點(diǎn)續(xù)傳,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。所以在客戶端瀏覽器傳給
Web服務(wù)器的時(shí)候要多加一條信息--從哪里開始。

  下面是用自己編的一個(gè)"瀏覽器"來(lái)傳遞請(qǐng)求信息給Web服務(wù)器,要求從2000070字節(jié)開始。

GET /down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/Html, image/gif, image/jpeg, *; q=.2, */*; q=.2
  仔細(xì)看一下就會(huì)發(fā)現(xiàn)多了一行RANGE: bytes=2000070-;這一行的意思就是告訴服務(wù)器down.zip這個(gè)文件從2000070字節(jié)開始傳,前面的字節(jié)不用傳了。

  服務(wù)器收到這個(gè)請(qǐng)求以后,返回的信息如下:

206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
  和前面服務(wù)器返回的信息比較一下,就會(huì)發(fā)現(xiàn)增加了一行:

Content-Range=bytes 2000070-106786027/106786028
  返回的代碼也改為206了,而不再是200了。

  知道了以上原理,就可以進(jìn)行斷點(diǎn)續(xù)傳的編程了。

  (二)java實(shí)現(xiàn)斷點(diǎn)續(xù)傳的要害幾點(diǎn)

  (1)用什么方法實(shí)現(xiàn)提交RANGE: bytes=2000070-。
當(dāng)然用最原始的Socket是肯定能完成的,不過那樣太費(fèi)事了,其實(shí)Java的net包中提供了這種功能。代碼如下:

URL url = new URL(" http://www.sjtu.edu.cn/down.zip";;);
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection

();
//設(shè)置User-Agent
httpConnection.setRequestProperty("User-Agent","NetFox");
//設(shè)置斷點(diǎn)續(xù)傳的開始位置
httpConnection.setRequestProperty("RANGE","bytes=2000070");
//獲得輸入流
InputStream input = httpConnection.getInputStream();
  從輸入流中取出的字節(jié)流就是down.zip文件從2000070開始的字節(jié)流。大家看,其實(shí)斷點(diǎn)續(xù)傳用Java實(shí)現(xiàn)起來(lái)還是很簡(jiǎn)單的吧。接下來(lái)要做的事就是怎么保存獲得的流到文件中去了。

  保存文件采用的方法

  我采用的是IO包中的RandaccessFile類。

  操作相當(dāng)簡(jiǎn)單,假設(shè)從2000070處開始保存文件,代碼如下:



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平乡县| 阿拉尔市| 东海县| 合水县| 法库县| 南江县| 乌拉特中旗| 信丰县| 西乌珠穆沁旗| 兴文县| 新竹市| 白沙| 宁夏| 舟山市| 潜山县| 高邮市| 文水县| 奎屯市| 万源市| 高州市| 元氏县| 长宁县| 满洲里市| 渭源县| 前郭尔| 桂东县| 英吉沙县| 会宁县| 黄平县| 迁西县| 棋牌| 普陀区| 蛟河市| 福安市| 漯河市| 繁昌县| 读书| 永吉县| 澜沧| 湖口县| 石阡县|