Discussion:
[問題] 讀取網路串流的問題
(时间太久无法回复)
飄落的櫻花
2007-04-09 15:41:28 UTC
Permalink
最近在寫下載圖片的程式

然後發現圖片檔案一大讀的檔案會不完全

只有小圖片可以完全

下面是我的程式碼

byte[] b=new byte[1024];
int by=0;

url=new URL(file[i]);
dis=new DataInputStream(url.openStream());

while(true)
{

by=dis.read(b);

System.out.println(by);
if(by<0){break;}
dos.write(b);

}

我用一個by來記錄我每次讀取的byte數

發現每讀取兩三次就會有一次讀取不完全的情況

如果檔案小
就會列出
1024
xxx
-1

這樣是不會出問題


檔案大一點
就會列出
1204
1024
xxx
1204
xxx

就會像上面一樣有某次沒讀滿的情況

只要發生沒讀滿的情況,檔案就會整個錯誤無法開啟

請問我的程式碼有哪裡需要修改

我一直想不出來問題出在哪裡OTL

請高手幫忙

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.96.32
※ 編輯: del680202 來自: 125.225.96.32 (04/09 23:41)
小安
2007-04-09 15:47:30 UTC
Permalink
※ 引述《del680202 (飄落的櫻花)》之銘言:
: by=dis.read(b);
: System.out.println(by);
: if(by<0){break;}
: dos.write(b);

: 1204
: 1024
: xxx
: 1204
: xxx
: 就會像上面一樣有某次沒讀滿的情況
: 只要發生沒讀滿的情況,檔案就會整個錯誤無法開啟
: 請問我的程式碼有哪裡需要修改
: 我一直想不出來問題出在哪裡OTL
: 請高手幫忙

封包在網路上傳遞時,有可能會再被切割,
且在到達目的地以前不會再被組合,
詳細資訊請參考網路協定相關的參考資料。

其實 Stream 還有另一個 overloding 版本的 write,
可以指定 byte 陣列中要被寫入 Stream 的範圍。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.71.56

Loading...