W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)文件很大時(shí),有時(shí)候我們會(huì)考慮分塊下載,與斷點(diǎn)續(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() // 因?yàn)檫@次請(qǐng)求只是為了獲得文件大小,不消費(fèi)報(bào)文體,所以直接關(guān)閉
.getContentLength(); // 獲得待下載文件的大小(由于未消費(fèi)報(bào)文體,所以該請(qǐng)求不會(huì)消耗下載報(bào)文體的時(shí)間和網(wǎng)絡(luò)流量)
download(totalSize, 0); // 從第 0 塊開(kāi)始下載
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") // 下載到同一個(gè)文件里
.setAppended() // 開(kāi)啟文件追加模式
.setOnSuccess((File file) -> {
if (end < totalSize) { // 若未下載完,則繼續(xù)下載下一塊
download(totalSize, index + 1);
} else {
System.out.println("下載完成");
}
})
.start();
}
如果覺(jué)得 OkHttps 好用,就去點(diǎn)個(gè) Star 吧,項(xiàng)目地址:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: