电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

用Java實現斷點續傳(HTTP

瀏覽:132日期:2024-06-21 09:50:09
內容: 出自:鐘華 用Java實現斷點續傳(HTTP) 內容: (一)斷點續傳的原理 (二)Java實現斷點續傳的關鍵幾點 (三)斷點續傳內核的實現 關于作者 鐘華 (zhong_hua@263.net)2001 年 5 月(一)斷點續傳的原理 其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。打個比方,瀏覽器請求服務器上的一個文時,所發出的請求如下:假設服務器域名為wwww.sjtu.edu.cn,文件名為down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Connection: Keep-Alive服務器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下:200Content-Length=106786028Accept-Ranges=bytesDate=Mon, 30 Apr 2001 12:56:11 GMTETag=W/'02ca57e173c11:95b'Content-Type=application/octet-streamServer=Microsoft-IIS/5.0Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以在客戶端瀏覽器傳給Web服務器的時候要多加一條信息--從哪里開始。下面是用自己編的一個'瀏覽器'來傳遞請求信息給Web服務器,要求從2000070字節開始。GET /down.zip HTTP/1.0User-Agent: NetFoxRANGE: bytes=2000070-Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2仔細看一下就會發現多了一行RANGE: bytes=2000070-這一行的意思就是告訴服務器down.zip這個文件從2000070字節開始傳,前面的字節不用傳了。服務器收到這個請求以后,返回的信息如下:206Content-Length=106786028Content-Range=bytes 2000070-106786027/106786028Date=Mon, 30 Apr 2001 12:55:20 GMTETag=W/'02ca57e173c11:95b'Content-Type=application/octet-streamServer=Microsoft-IIS/5.0Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT和前面服務器返回的信息比較一下,就會發現增加了一行:Content-Range=bytes 2000070-106786027/106786028返回的代碼也改為206了,而不再是200了。知道了以上原理,就可以進行斷點續傳的編程了。(二)Java實現斷點續傳的關鍵幾點 (1)用什么方法實現提交RANGE: bytes=2000070-。當然用最原始的Socket是肯定能完成的,不過那樣太費事了,其實Java的net包中提供了這種功能。代碼如下:URL url = new URL('http://www.sjtu.edu.cn/down.zip');HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();//設置User-AgenthttpConnection.setRequestProperty('User-Agent','NetFox');//設置斷點續傳的開始位置httpConnection.setRequestProperty('RANGE','bytes=2000070');//獲得輸入流InputStream input = httpConnection.getInputStream();從輸入流中取出的字節流就是down.zip文件從2000070開始的字節流。大家看,其實斷點續傳用Java實現起來還是很簡單的吧。接下來要做的事就是怎么保存獲得的流到文件中去了。保存文件采用的方法。我采用的是IO包中的RandAccessFile類。操作相當簡單,假設從2000070處開始保存文件,代碼如下:RandomAccess oSavedFile = new RandomAccessFile('down.zip','rw');long nPos = 2000070;//定位文件指針到nPos位置oSavedFile.seek(nPos);byte[] b = new byte[1024];int nRead;//從輸入流中讀入字節流,然后寫到文件中while((nRead=input.read(b,0,1024))> 0){oSavedFile.write(b,0,nRead);}怎么樣,也很簡單吧。接下來要做的就是整合成一個完整的程序了。包括一系列的線程控制等等。(三)斷點續傳內核的實現主要用了6個類,包括一個測試類。SiteFileFetch.java負責整個文件的抓取,控制內部線程(FileSplitterFetch類)。FileSplitterFetch.java負責部分文件的抓取。FileAccess.java負責文件的存儲。SiteInfoBean.java要抓取的文件的信息,如文件保存的目錄,名字,抓取文件的URL等。Utility.java工具類,放一些簡單的方法。TestMethod.java測試類。下面是源程序: /***SiteFileFetch.java*/package NetFox;import java.io.*;import java.net.*;public class SiteFileFetch extends Thread {SiteInfoBean siteInfoBean = null; //文件信息Beanlong[] nStartPos; //開始位置long[] nEndPos; //結束位置FileSplitterFetch[] fileSplitterFetch; //子線程對象long nFileLength; //文件長度boolean bFirst = true; //是否第一次取文件boolean bStop = false; //停止標志File tmpFile; //文件下載的臨時信息DataOutputStream output; //輸出到文件的輸出流public SiteFileFetch(SiteInfoBean bean) throws IOException{siteInfoBean = bean;//tmpFile = File.createTempFile ('zhong','1111',new File(bean.getSFilePath()));tmpFile = new File(bean.getSFilePath()+File.separator + bean.getSFileName()+'.info');if(tmpFile.exists ()){bFirst = false;read_nPos();}else{nStartPos = new long[bean.getNSplitter()];nEndPos = new long[bean.getNSplitter()];}}public void run(){//獲得文件長度//分割文件//實例FileSplitterFetch//啟動FileSplitterFetch線程//等待子線程返回try{if(bFirst){nFileLength = getFileSize();if(nFileLength == -1){System.err.println('File Length is not known!');}else if(nFileLength == -2){System.err.println('File is not access!');}else{for(int i=0;i
標簽: Java
相關文章:
主站蜘蛛池模板: 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 南京泽朗生物科技有限公司| 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 房间温控器|LonWorks|海思| 云南成人高考网| 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 芝麻黑-芝麻黑石材厂家-永峰石业 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 江西自考网| 滚筒线,链板线,总装线,流水线-上海体能机电有限公司 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 翅片管换热器「型号全」_厂家-淄博鑫科环保| 信阳市建筑勘察设计研究院有限公司| 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 必胜高考网_全国高考备考和志愿填报信息平台 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 |