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

来源:4-3 字节流之文件输出流FileOutputStream

qq_酸牛奶_0

2016-07-11 13:19

代码:

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://img.mukewang.com/57832c2b00011b4a06270114.jpg

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


写回答 关注

3回答

  • mutou3443
    2016-07-11 13:32:53
    已采纳

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

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

    leowei

    应该是-1那的问题,读的时候只要是buf.length 中的数,就不会越界

    2016-11-02 14:56:09

    共 2 条回复 >

  • qq_酸牛奶_0
    2016-07-11 13:37:08

    谢谢!粗心写错了

  • mutou3443
    2016-07-11 13:34:36

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

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题