首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 網絡下載文本文件不全:read 返回值未用於 write 導致數據截斷或殘留

     編輯:程式設計綜合問答

錯誤代碼

while (is.read(buff) != -1) {
    os.write(buff); // 寫入整個緩衝區,包含上次殘留數據
}

原因

read(buff) 返回實際讀取字節數 len,末尾可能不滿緩衝區。直接 write(buff) 會寫入殘留舊數據,導致文件變大、內容錯誤。

修正代碼

byte[] buff = new byte[4096];
int len;
while ((len = is.read(buff)) != -1) {
    os.write(buff, 0, len); // 關鍵:只寫入實際讀取的長度
}
os.close(); // 先關輸出流刷新緩衝區
is.close();

補充最佳實踐

  • 使用 try-with-resources (Java 7+) 自動關閉流。
  • 大文件考慮 Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING) (Java 7+)。
  • 下載前檢查 Content-Length 預分配空間或驗證完整性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved