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

Java DataOutputStream 傳輸檔案僅一半:讀取緩衝區未正確使用寫入長度

     編輯:程式設計綜合問答

代碼 dos.write(buf, 0, dis.read(buf)) 中,dis.read(buf) **再次讀取** 下一塊資料並返回實際讀取長度,導致當前緩衝區 buf 的內容被覆蓋,且寫入長度錯誤。

修正

int read;
while ((read = dis.read(buf)) != -1) {
    dos.write(buf, 0, read); // 使用上一次讀取的長度
}
dos.flush();

關鍵點

  • read = dis.read(buf) 同時完成「讀取資料到 buf」與「返回實際位元組數」。
  • 寫入必須使用同一個 read 變數,不可再次呼叫 read()。
  • 緩衝區大小 1024 或 8192 均可,大檔案建議 64KB 減少系統調用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved