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

首頁 > 學院 > 開發設計 > 正文

用Java制作網絡文件下載系統

2019-11-18 10:45:52
字體:
來源:轉載
供稿:網友

  由于linux操作系統的興起和java語言的日漸成熟,使用Java語言實現一個跨平臺的、外觀一致的下載工具軟件已成為可能。網絡螞蟻是大家非常熟知的下載工具軟件,我采用Java語言實現了類似網絡螞蟻的基本功能的軟件Jants。本文介紹了一些技術實現要點。
  
  單線程直接獲取網絡文件
  
  單線程直接獲取網絡文件的要害點是獲取網絡文件,以確定基本方法的正確性。它的初始代碼的內容比較簡單,可以利用HTTP的基本知識進行設計。它的基本原理是:連接網絡地址,打開連接并獲取輸入流,從輸入流中讀取數據。實現代碼(測試過程中使用的)如下:
  
  int data;//從輸入流中獲取數據
  URL url=new URL("http://www.sohu.com");
  //創建連接的地址
  HttpURLConnection connection=url.openConnection();
  //打開連接
  int responsCode=connection. getResponseCode();
  //返回Http的響應狀態碼
  InputStream input=connection.getInputStream();
  //獲取輸入流
  System.out.  While((data=input.read())!=-1)
  System.out.println(data);
  //將獲取的數據打到屏幕顯示出來
  
  
  
  
  單線程斷點續傳
  
  
  大家經常有這樣的體會:下載一個幾十兆的文件時忽然斷線,結果前功盡棄。可以使用斷點續傳解決這個問題。
  
  基本原理
  
  這里主要介紹一下斷點續傳的原理。斷點續傳的原理很簡單,只是在HTTP請求上和一般的下載有所不同。
  
  所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以,在客戶端傳給Web服務器的時候,要多加一條信息——下載的起始位置,且服務器返回的HTTP狀態代碼也從200轉變為206。
  
  上述要點,可以使用Java語言中的HttpURLConnection類中的setRequestProperty()方法來設置。
  
  斷點續傳的要害步驟
  
  1.實現提交斷點續傳下載的起始位置
  
  Java的Net包中提供了這種功能,代碼如下:
  
  URL url = new URL("http://www.mydomain.com/down.z
  HttpURLConnection httpConnection=(HttpURLConnection) url.openConnection();
  //設置斷點續傳的開始位置
  httpConnection.setRequestProperty("RANGE","bytes=10000");
  //設置請求信息
  httpConnection.setRequestProperty("GET","/down.zip HTTP/1.1");
  //設置接受信息
  httpConnection.setRequestProperty("Accept","image/gif,image/x-xbitmap,
application/
  msWord,*/*");
  //設置連接信息
  httpConnection.setRequestProperty("Connection","Keep-Alive");
  //獲得輸入流
  InputStream input = httpConnection.getInputStream();
  
  從輸入流中取出的字節流,就是down.zip文件從10000字節開始的字節流。
  
  2.保存獲得的字節流到文件中
  
  由于文件的下載涉及到斷點續傳,因此,在保存文件的時候,需要對文件進行隨機讀寫。非凡是在多線程下載的過程中,需要在寫文件之前在文件中定位。
  
  在Java的IO包中的RandomaccessFile類可以滿足這種設計需求。該類在文件中定位指針時,用到的方法是seek(Long)。
  
  操作相當簡單。假設從10000字節處開始保存文件,代碼如下:
  
  RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
  //創建隨機文件
  long nPos = 10000;
  //定位文件指針到nPos位置
  oSavedFile.seek(nPos);
  byte[] b = new byte[1024];
  int nRead;
  //從輸入流中讀入字節流,然后寫到文件中
  while((nRead=input.read(b,0,1024)) > 0)
  { //input為網絡輸入流
   oSavedFile.write(b,0,nRead);
  }
  
  3.保存已經下載的文件的長度值
  
  由于在每次斷開連接時都要保存已下載文件的長度,且應進行永久保存,因此將它保存到文件介質中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 政和县| 磴口县| 睢宁县| 筠连县| 衡水市| 兴国县| 华安县| 峡江县| 黄陵县| 来凤县| 青浦区| 镇巴县| 时尚| 金门县| 延边| 隆化县| 铅山县| 江北区| 白银市| 延吉市| 石门县| 璧山县| 茶陵县| 资溪县| 贡觉县| 肥西县| 手游| 商都县| 项城市| 赞皇县| 南阳市| 吉隆县| 安龙县| 长海县| 张家港市| 阳朔县| 宝丰县| 交口县| 大邑县| 周宁县| 资中县|