首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java URL 斷點下載實現:Range 請求頭與隨機訪問文件

     編輯:Java 程式設計入門

HTTP 斷點下載的核心在於 Range: bytes=start- 請求頭,告知服務器從指定字節開始傳輸。配合 RandomAccessFile.seek() 定位寫入,即可實現最簡單的斷點續傳 Demo。

最小化實現代碼

import java.io.*;
import java.net.*;

public class ResumeDownloadDemo {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://localhost:8080/first/he.txt");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 關鍵:設置從第 5 字節開始下載(斷點續傳核心)
        conn.setRequestProperty("Range", "bytes=5-");

        try (InputStream in = conn.getInputStream();
             FileOutputStream out = new FileOutputStream("d:\\a.txt")) {

            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
        }
        // 若需隨機寫入(多線程分塊),改用 RandomAccessFile:
        // RandomAccessFile raf = new RandomAccessFile("d:\\a.txt", "rw");
        // raf.seek(5); // 定位到第 5 字節
        // ... 寫入數據 ...
    }
}

關鍵點解析

組件作用
Range: bytes=5-請求從第 5 字節到文件結尾;bytes=5-100 表示 5~100 字節
響應碼 206 Partial Content服務器支持斷點下載的標誌(需服務端配置 Accept-Ranges: bytes)
RandomAccessFile.seek(pos)移動文件指針,實現任意位置寫入,多線程分塊下載必備

生產級擴展建議

  1. 斷點記錄:將已下載字節數持久化(本地文件/數據庫),重啟時讀取續傳。
  2. 多線程分塊:參考「Java 多線程下載實戰」將文件分段並行下載。
  3. 完整性校驗:下載完成後對比 Content-MD5 或計算文件哈希。
  4. 異常重試:網絡波動時指數退避重試,避免無限循環。

幾十行代碼即可跑通斷點下載主流程,核心在於理解 HTTP Range 請求與文件隨機訪問的配合。實際項目中建議封裝為可復用的 Downloader 組件,接入線程池、進度回調、限速等能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved