为了账号安全,请及时绑定邮箱和手机立即绑定

为什么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个字节
  while((b = fis.read(buf, 0, buf.length))!=0)
  {
   //将buf的内容写入fos,从0位置开始,最多写入b个字节
   fos.write(buf, 0, buf.length);    //write(buf,0,b)
   fos.flush();
  }

老师写的是write(buf,0,b),但是我运行以后是这样

http://img1.sycdn.imooc.com//57832c2b00011b4a06270114.jpg

改成fos.write(buf, 0, buf.length);就可以了


正在回答

3 回答

b是你本次读到的字节数,其中b<= buf.length。

读满的时候b= buf.length,读到最后一次的时候很可能b< buf.length,这个时候buf里面一共有b(<buf.length)个字节,你fos.write(buf, 0, buf.length)就数组越界了。

1 回复 有任何疑惑可以回复我~
#1

leowei

应该是-1那的问题,读的时候只要是buf.length 中的数,就不会越界
2016-11-02 回复 有任何疑惑可以回复我~

谢谢!粗心写错了

0 回复 有任何疑惑可以回复我~

  while((b = fis.read(buf, 0, buf.length))!=0)  应该是  while((b = fis.read(buf, 0, buf.length))!=-1)吧  

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么write(buf, 0, b)会报错,改成write(buf, 0, buf.length)就不会报错了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信