java實現(xiàn)下載器
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
作者 | 一樂樂
來源 | urlify.cn/MBra2u
java實現(xiàn)下載器(以及創(chuàng)建一個URL對象)
1.思路講解:
(1)注意路徑:是網(wǎng)絡路徑噢
(2)創(chuàng)建創(chuàng)建網(wǎng)路協(xié)議對象(遠程對象):HttpURLConnection urlConnection
(3)定位網(wǎng)絡資源:URL url
(4)調(diào)用url的openConnection()方法,連接遠程對象
(5)設置遠程對象的參數(shù)和屬性:例如 urlConnection.setRequestProperty("Range", "bytes=0-");
(6)發(fā)送連接請求,實現(xiàn)真正的連接:urlConnection.connect();
(7)通過返回碼,判斷是否連接成功(200以內(nèi)是成功的)
(8)遠程對象連接成功后,創(chuàng)建遠程對象輸入流
(9)開始讀取與寫入字節(jié)啦
2.代碼:
package DownLoadDemo;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.RandomAccess;
public class DownLoaderTest {
private static final int MAX_SIZE_BUFF = 1024 * 1024 * 10; //1MB大小
//網(wǎng)絡視頻路徑
private static String path = "https://www.iqiyi.com/v_uggavqs43w.html";
private static String writePath = "111.mp4";
public static void main(String[] args) throws IOException {
//網(wǎng)絡協(xié)議對象(遠程對象)
HttpURLConnection urlConnection = null;
//定位網(wǎng)絡資源
URL url = new URL(path);
//調(diào)用url的openConnection()連接遠程對象
urlConnection = (HttpURLConnection) url.openConnection();
//設置遠程對象的參數(shù)和屬性:"Range" : 范圍," 0-":沒有終止字節(jié)數(shù),支持斷點續(xù)傳
urlConnection.setRequestProperty("Range", "bytes=0-");
//發(fā)送連接請求,實現(xiàn)真正的連接
urlConnection.connect();
//通過返回碼,判斷是否連接成功(200以內(nèi)是成功的)
int code = urlConnection.getResponseCode();
if(code / 100 != 2) { //請求失敗
throw new RuntimeException("請求失敗,返回碼:" + code + "錯誤");
}
//遠程對象連接成功后,創(chuàng)建遠程對象輸入流
InputStream inputStream = urlConnection.getInputStream();
//創(chuàng)建bufferedInputStream
// BufferedInputStream bInStream = new BufferedInputStream(inputStream);
// //使用RandomAccess工具類
// RandomAccessFile randomAccess = new RandomAccessFile(path, "rw");
//創(chuàng)建緩沖字節(jié)數(shù)組buff
byte[] buff = null;
//開始讀寫
//1、添加(小技術)打印下載進度(下載的"每塊字節(jié)"字節(jié)數(shù)/時間)
//獲取文件大小
int fileSize = urlConnection.getContentLength();
System.out.println(fileSize);
int downloadedCount = 0;
while(downloadedCount < fileSize) {
//分塊,處理一下最后剩余不足MAX_SIZE_BUFF量
if(fileSize - downloadedCount > MAX_SIZE_BUFF) {
buff = new byte[MAX_SIZE_BUFF];
}else {
buff = new byte[fileSize - downloadedCount];
}
int currCount = 0;
int read = -1;
long startTime = System.currentTimeMillis();
// //讀取
// bInStream.read(buff);
while(currCount < buff.length) {
read = inputStream.read();
if(read == -1) {
break;
}
buff[currCount++] = (byte)read;
}
if(read == -1) {
break;
}
long endTime = System.currentTimeMillis();
double speed = currCount / ((endTime - startTime) / 1000.0); //速度b/s
System.out.println("讀取速度:" + speed);
downloadedCount += currCount;
}
}
}
3.網(wǎng)絡編程知識:
1.URL對象:
URL:統(tǒng)一資源定位符
作用:
☆通過 URL 可以獲得互聯(lián)網(wǎng)資源相關信息,包括獲得URL所引用的遠程對象URLConnection,以及URL的輸入流對象InputStream。
☆類 URL 是指向互聯(lián)網(wǎng)“資源”的指針。資源可以是簡單的文件或目錄,也可以是對更為復雜的對象的引用,例如對數(shù)據(jù)庫或搜索引擎的查詢。
簡單說,就是在網(wǎng)絡上找到資源的位置(統(tǒng)一資源定位符),才可以通過網(wǎng)絡的服務進行資源的各種操作:如存取、更新、替換和查找其屬性。(得URL所引用的遠程對象URLConnection,以及URL的輸入流對象InputStream。)
2.創(chuàng)建一個URL對象步驟:
創(chuàng)建URL對象,并通過調(diào)用openConnection方法獲得URLConnection對象;
設置URLConnection參數(shù)和普通請求屬性;
向遠程資源發(fā)送請求;
遠程資源變?yōu)榭捎茫绦蚩梢栽L問遠程資源的頭字段和通過輸入流來讀取遠程資源返回的信息。
3.連接后返回碼含義:

粉絲福利:Java從入門到入土學習路線圖
??????

??長按上方微信二維碼 2 秒
感謝點贊支持下哈 
