代碼 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()。