A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊永杰 黑马帝   /  2012-5-7 00:04  /  1760 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



FileOutputStream fos = new FileOutputStream("1234.txt");
  
  byte[] buf = new byte[1024];
  
  int len = 0;
  
  while((len=sis.read(buf))!=-1){//这个代码是相当于将读到的元素传入到数组中吗?以及这个while方法里面的Write写入给的三个参数,应该怎么理解呢?谢过各位帮忙!!!!
   fos.write(buf,0,len);
  }
  
  fos.close();  
}
}

5 个回复

倒序浏览
int len = 0; //定义一个变量,接收read读到的字节个数
while((len=sis.read(buf))!=-1){  //将read读到的字节一个一个的存到byte数组中,从下标0开始存,并把读到的个数赋值给len变量,例如读取到10个字节,len就=10.读到结尾没有数据时,就返回-1,所以以!=-1来判断,是否继续循环读取.
   fos.write(buf,0,len);  //讲byte数组的数据写入指定的文件里,从下标0开始写,len表示读取到多少个字节,就写多少个到指定文件里,这样可以节约内存
  }
回复 使用道具 举报
谭景宾 发表于 2012-5-7 00:16
int len = 0; //定义一个变量,接收read读到的字节个数
while((len=sis.read(buf))!=-1){  //将read读到的 ...

哦了,困惑了一个下午,可恨网速不给力,也没办法提问,非常感谢。:lol
回复 使用道具 举报
樊永杰 发表于 2012-5-7 00:21
哦了,困惑了一个下午,可恨网速不给力,也没办法提问,非常感谢。

太客气了,互相学习,呵呵,我也巩固了基础知识。
回复 使用道具 举报
FileOutputStream fos = new FileOutputStream("1234.txt");
  
  byte[] buf = new byte[1024];
  
  int len = 0;
  
  while((len=sis.read(buf))!=-1){//这个代码是相当于将读到的元素传入到数组中吗?以及这个while方法里面的Write写入给的三个参数,应该怎么理解呢?谢过各位帮忙!!!!
   fos.write(buf,0,len);
  }
  
  fos.close();  
}
}
//len=sis.read(buf)
//将读取到的字节存储在缓冲的字节数组中,这样可以提高效率,
//但是他返回的是读取到的数组个数,如果独到系统平台定义的标记,那么他就不读了,返回读取的个数
//下次读取时,直接返回读取的标记,为了与字符加以区别,用-1表示,因为char用int行表示是0-2635...
//就是2的16次方,如果返回0的话,表示读取到有字符,所以用-1表示。
//fos.write(buf,0,len);
//这样好像不对吧
//应该是 fos.write(new String(buf,0,len));
//其实它调用了String的一个构造函数方法,创建一个对象,你可以查询API
//然后默认的toString()打印出来了,
//o了
回复 使用道具 举报
为什么不看看方法的提示呢?鼠标移到read()方法上就可以看到返回的是啥值了,也能知道传的是啥参数,虽然是纯英文,但应该也能理解个大概吧。。
1楼的解答是我理解错了还是你的他的说法错了,
read(buf)应该是while每次循环读取1byte的数据吧?而len变量就像他说的,保存读取到的字节数,如果当次读取的数据字节数为0,就会返回-1,退出循环。
write(buf,0,len)方法,buf是你上面读取的数据,当然是必须有数据的,才能进这方法; 0是从第一位开始,而len是你保存的字节长度了,也像他说的,节省内存。
这些参数和返回值的解释都是可以看提示的,楼主该多看看,也能提高自己的英文阅读能力,实在不能理解再寻求帮助,不能啥都靠别人啊。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马