while((len=in.read(buffer))>0)out.write(buffer,0,len)为什么是while而不是if
答案:1 悬赏:0 手机版
解决时间 2021-03-23 18:14
- 提问者网友:辞取
- 2021-03-22 20:54
while((len=in.read(buffer))>0)out.write(buffer,0,len)为什么是while而不是if
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-03-22 22:24
因为io流中到底要读入多少数据事先并不知道,就比如你从一个文档中读内容,内容长短并不确定,while循环就是让不断的向缓存中读,知道读完整个文档为止。如果你用if,在满足条件的情况下,if后边的语句只执行一次,假设此时buffer中只存储了文档中的第一行内容,那你文档中后边的内容都不准备要了吗?所以if不行,因为它后边的语句最多执行一次,不能保证能读完整个文件!追问感谢回答!
还有点疑问:每次while循环都执行一次write(buffer,0,len),len是从1一直增加到数据长度N的吗,假设数据长度N,第一次write(buffer,0,1),第二次write(buffer,0,2)....第N次write(buffer,0,N)每次写都会覆盖前一次写过的数据吗?追答是这样的,举个例子来说吧。假如你要读取的文件内容如下:
asfdfsda
hghjh
fdf
rewterter
说一下in.read(buffer)的返回值,返回值是你读进缓冲区的字符个数,也就是
如果此时读入的是第一行,那么len就等于8,是第二行那么len就等于5,第三行是3,第四行是9,第五行是结尾那么读入的没有东西,len就是0,此时不满足循环条件,那么跳出循环,读取文件结束。len是多少是看读入buffer了多少个字符,每次都是变化的!而由于每次都是读入多少就写出多少,也就是读入的是什么,写出的就是什么,所以并不会出现你所说的覆盖情况!
还有点疑问:每次while循环都执行一次write(buffer,0,len),len是从1一直增加到数据长度N的吗,假设数据长度N,第一次write(buffer,0,1),第二次write(buffer,0,2)....第N次write(buffer,0,N)每次写都会覆盖前一次写过的数据吗?追答是这样的,举个例子来说吧。假如你要读取的文件内容如下:
asfdfsda
hghjh
fdf
rewterter
说一下in.read(buffer)的返回值,返回值是你读进缓冲区的字符个数,也就是
如果此时读入的是第一行,那么len就等于8,是第二行那么len就等于5,第三行是3,第四行是9,第五行是结尾那么读入的没有东西,len就是0,此时不满足循环条件,那么跳出循环,读取文件结束。len是多少是看读入buffer了多少个字符,每次都是变化的!而由于每次都是读入多少就写出多少,也就是读入的是什么,写出的就是什么,所以并不会出现你所说的覆盖情况!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯