问答详情
源自:4-2 字节流之文件输入流FileInputStream-2

while循环是不是存在问题的

最后这个while循环不会一直在那从0开始read循环吗  因为bytes不等于-1啊 是不是有问题

提问者:java_jun 2017-02-04 22:28

个回答

  • 霸道学长3192921
    2017-02-16 17:17:43

    read(buf,0,b)是把读到的数据存到buf这个数组里面去,从0到b!返回值是读的字节数!

  • TiGer196
    2017-02-08 02:21:42

    read()返回的是放入数组buf的大小,前面定义buf大小为8*1024,单位字节,假设一个文件大小为13192字节,读三次才能读完,第一次读8192字节,bytes=8192,然后打印出来,第二次,in.read(buf,0,buf.length)=5000,然后前面byte数组中前5000个字节被覆盖,然后for循环把这5000个字节打印出来,第三次没东西读了,返回-1,结束循环。而这时候buf的大小还是8192,第二次只是覆盖了前面的,AIP也解释的很不清楚:这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素

  • java_jun
    2017-02-06 00:22:33

    。。但是while里面每次都是写的从0开始的

    while((bytes = in.read(buf,0,buf.length)) != -1)

    还有个问题 一次就读取满了buf这个数组,下次再读进去不是放不进去了吗  大神讲解下

  • 114孢
    2017-02-05 17:29:37

    while没错  对象.read(byte[] b, int off, int len);//方法是这样的:从对象中读取len个字节放进b中,每次从b中off位置开始放,.但是老师对于这块有一个问题没讲清,我的理解是:文件指针从0开始读取,每次读取,指针后移一次,读取完一组字节,此时指针已经移动到了下一个未读取的位置,下次while循环时,从指针的位置继续读取,往放入b中  从b的off位置又开始放,知道放满,每次循环。当read方法读取到结尾时,返回值为-1,bytes接受该返回值,作为循环结束条件。(可能有错误的地方,同求大神指明)