為什么write(buf, 0, b)會報錯,改成write(buf, 0, buf.length)就不會報錯了
代碼:
FileInputStream fis = new FileInputStream(srcfile);
??FileOutputStream fos = new FileOutputStream(destfile,true);
??byte[] buf = new byte[20*1024];
??int b=0;
??//從fis中讀取數據存放到buf,從0位置開始,讀取最長buf.length個字節(jié)
??while((b = fis.read(buf, 0, buf.length))!=0)
??{
???//將buf的內容寫入fos,從0位置開始,最多寫入b個字節(jié)
???fos.write(buf, 0, buf.length);????//write(buf,0,b)
???fos.flush();
??}
老師寫的是write(buf,0,b),但是我運行以后是這樣
改成fos.write(buf, 0, buf.length);就可以了
2016-07-11
b是你本次讀到的字節(jié)數,其中b<=?buf.length。
讀滿的時候b=?buf.length,讀到最后一次的時候很可能b<?buf.length,這個時候buf里面一共有b(<buf.length)個字節(jié),你fos.write(buf, 0, buf.length)就數組越界了。
2016-07-11
謝謝!粗心寫錯了
2016-07-11
? while((b = fis.read(buf, 0, buf.length))!=0) ?應該是? while((b = fis.read(buf, 0, buf.length))!=-1)吧 ?