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

read(byte[] b,int off,int len)的返回值

老师的while((bytes=in.read(buf,0,buf.length))!=-1)这里应该有点问题,这时候read()返回的应该是所读的字节数,是不是设置bytes++<=buf.length

提问者:放羊的牧马人3760913 2016-12-16 08:57

个回答

  • 慕移动9181930
    2022-03-23 04:42:37

    请问你知道老师用的是哪个版本的吗JSW3C

  • 头发多
    2017-01-28 17:57:24

    read返回的确实是字节数,但是读到文件尾时就返回-1。

    所以如果文件没有被读完,则返回读取长度而不是-1,while继续执行,循环利用buf。

    如果文件被读完,则返回-1,while循环结束。

    -----------------------------------------------

    如果按你说的bytes++<=buf.length,那读到文件尾时返回-1也小于buf.length,那循环还继续做不就错了^_^

  • weibo_肖邦在对我微笑_0
    2016-12-16 14:21:34

    read

    public int read(byte[] b)
            throws IOException

    从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。


    覆盖:

    类 InputStream 中的 read

    参数:

    b - 存储读取数据的缓冲区。

    返回:

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

    抛出:

    IOException - 如果发生 I/O 错误。

    另请参见:

    InputStream.read(byte[], int, int)