從 Tomcat 服務器下載音樂(.mp3)和歌詞(.lrc),服務器原文件大小不同,但手機端下載後兩文件大小完全一致。
下載邏輯錯誤:將同一個輸入流的數據寫入了兩個輸出文件,或者請求 URL 錯誤導致兩個下載任務實際指向同一資源(如服務器端重定向/映射錯誤返回同一內容)。
Content-Length 和實際下載內容(用文本編輯器打開 .lrc 看是否為二進制音頻數據)。HttpURLConnection、獨立的 InputStream 和 FileOutputStream。常見錯誤:複用同一連接對象、流未關閉導致數據殘留、線程池任務參數傳遞錯誤。
// 正確模式:每個文件獨立完整流程
private void downloadFile(String urlStr, File dest) {
HttpURLConnection conn = (HttpURLConnection) new URL(urlStr).openConnection();
try (InputStream in = conn.getInputStream();
FileOutputStream out = new FileOutputStream(dest)) {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) out.write(buffer, 0, len);
} finally { conn.disconnect(); }
}
先在 PC 瀏覽器驗證服務器接口無誤,再排查客端代碼。日誌記錄每個文件的下載 URL、Content-Length、實際寫入字節數,快速定位問題。