请教下 IO流读取写入的问题

qq_35635041 2016-08-16 06:53:27
读取和写入 字节流 的时候,用了while循环来读取写入 :
(这里 file是读取,files是写入,b是定义过的数组)

int len = -1;
while((len = file.read(b))!=-1){
files.write(b, 0, len);
}

为什么不直接写入数组?不需要用到循环也可以啊:
files.write(b,0,file.read(b));
...全文
280 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
blazingfire 2016-08-23
  • 打赏
  • 举报
回复
多看书就不用来问了
qq_35635041 2016-08-22
  • 打赏
  • 举报
回复
多谢各位解答~!
树成 2016-08-18
  • 打赏
  • 举报
回复
因为你不能确定流的大小,而且有的流可能很大,例如一个20g的文件,把它写入数组你的程序就直接爆了
a1846427859 2016-08-17
  • 打赏
  • 举报
回复
一次读完有可能Jvm内存会溢出,而循环每次读一点能保证读完且不会内存溢出。
java星夜 2016-08-16
  • 打赏
  • 举报
回复
因为数组也有最大范围的啊,你读小的东西还可以,要是读非常大的数据,再大的数组读一次也读不完的
NewMoons 2016-08-16
  • 打赏
  • 举报
回复
楼主其实你是经验不足,有句话叫量变引起质变。 当你读的文件是一个6G的文件(一般高清AV文件有这么大的吧,你懂的)。而你的内存只有可怜的4G,这时候内存不就爆了? 而循环的目的是一部分一部分的读,每读一部分就写到另一个地方,这样内存就只占你读取的临时数组部分,内存就不会不够用。理解了? 就好比有2个大缸子,一个有水一个没水。如果你劲够大,你可以一把抱起直接倒到另一个缸子里,但如果你没这个力气,没关系,我用瓢子一瓢瓢舀呗。 多说一点,对于读取的文件多数为很大的场景,在循环读取的临时数组一般要设的大一点,具体就看你的应用环境了(比如服务器超强内存很大,cpu也NB,就可大点)。不过也不能太大,否则占用机器内存太多,影响别的应用,太小则效率太低,如何设计一个合适的值,这也是体现你经验和能力的地方。代码谁都会写,功能谁都能实现,但写出最合适的代码才是高手。
anakin_feng 2016-08-16
  • 打赏
  • 举报
回复
你一次能读完?

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧