OkHttps 實(shí)現(xiàn)分塊下載

2020-04-29 09:36 更新

  當(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)目地址:


官方網(wǎng)站:http://okhttps.ejlchina.com/

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)