while((bytes = in.read(buf,0,buf.length))!=-1)这里有疑问

来源:4-2 字节流之文件输入流FileInputStream-2

SeamusDR

2018-07-21 18:00

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

搞不明白,假如文件100字节,数组buf容量80字节,第一次读完的时候bytes等于80,然后执行完后边的代码,程序如何回到while循坏呢?

不是已经这样了吗 bytes=80!=-1,不应该是一个死循环吗?有些理解不了这个

而且就算我现在当做能明白这个循环为什么能进行了,可buf数组在第一次循环的时候已经被填满了呀,第二次去循环的时候,是把剩下的20字节覆盖进去吗?而且in.read(buf,0,buf.length))这里第二个参数是“0”,也没有看出来任何地方对这个参数有修改,程序怎么知道应该是从81位开始读呢?


写回答 关注

3回答

  • 精慕门9091657
    2020-07-20 18:14:31

      • 读入缓冲区的总字节数,如果没有更多的数据,因为文件的结尾已经到达, -1 。 

    刚查了下API文档,一楼的回复太给力了,让我也懂了

  • qq_什么都不懂就好_0
    2019-04-02 21:39:25
    /**
     * Reads a byte of data from this input stream. This method blocks
     * if no input is yet available.
     *
     * @return     the next byte of data, or <code>-1</code> if the end of the
     *             file is reached.
     * @exception  IOException  if an I/O error occurs.
     */
    public int read() throws IOException {
        return read0();
    }

    read()方法返回的是下一个字节

  • 牙膏牙膏牙膏
    2018-07-21 22:46:50

    in.read(buf,0,buf.length),这个方法返回的是它读取到的字节个数!

    正如你假设的,文件100字节,buf容量80字节:

    第一次读取的时候是返回80;

    第二次进入while的时候,文件读取的字节是从第81个字节开始(读取的时候文件有个指针一边读一边移动的,前面老师讲过),就是说文件还剩下20个字节可读,所以这时候返回的字节是20;

    第三次进入while的时候,文件已经没有内容可读了,所以返回的是-1;

    这时候就跳出了while!

    纯手打!望采纳!

    我爱孙佳怡

    牛逼,瞬间懂了

    2019-05-20 15:45:50

    共 3 条回复 >

文件传输基础——Java IO流

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

133754 学习 · 1030 问题

查看课程

相似问题