W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當文件很大時,有時候我們會考慮分塊下載,與斷點續(xù)傳的思路是一樣的,示例代碼:
static String url = "http://api.demo.com/download/test.zip"
public static void main(String[] args) {
long totalSize = HttpUtils.sync(url).get().getBody()
.close() // 因為這次請求只是為了獲得文件大小,不消費報文體,所以直接關(guān)閉
.getContentLength(); // 獲得待下載文件的大?。ㄓ捎谖聪M報文體,所以該請求不會消耗下載報文體的時間和網(wǎng)絡(luò)流量)
download(totalSize, 0); // 從第 0 塊開始下載
sleep(50000); // 等待下載完成(不然本例的主線程就結(jié)束啦)
}
static void download(long totalSize, int index) {
long size = 3 * 1024 * 1024; // 每塊下載 3M
long start = index * size;
long end = Math.min(start + size, totalSize);
HttpUtils.sync(url)
.setRange(start, end) // 設(shè)置本次下載的范圍
.get().getBody()
.toFile("D:/download/test.zip") // 下載到同一個文件里
.setAppended() // 開啟文件追加模式
.setOnSuccess((File file) -> {
if (end < totalSize) { // 若未下載完,則繼續(xù)下載下一塊
download(totalSize, index + 1);
} else {
System.out.println("下載完成");
}
})
.start();
}
如果覺得 OkHttps 好用,就去點個 Star 吧,項目地址:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: