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