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

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

放羊的牧马人3760913

2016-12-16 08:57

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

写回答 关注

3回答

  • 慕移动9181930
    2022-03-23 04:42:37
  • 头发多
    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)


    weibo_... 回复weibo_...

    而且如果按照你的想法 bytes++<=buf.length 循环一直会运行到bytes等于byte[] buf[]定义时的长度。 这是我的理解,具体会不会运行到我没试过。

    2016-12-16 14:25:55

    共 2 条回复 >

文件传输基础——Java IO流

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

133754 学习 · 1030 问题

查看课程

相似问题