为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

3 回答

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

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

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

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

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

1 回复 有任何疑惑可以回复我~

read

public int read(byte[] b)
        throws IOException

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


覆盖:

类 InputStream 中的 read

参数:

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

返回:

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

抛出:

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

另请参见:

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


0 回复 有任何疑惑可以回复我~
#1

weibo_肖邦在对我微笑_0

发错了,其实想发的是read public int read(byte[] b, int off, int len) throws IOException 这个方法 其实都没关系,你看函数返回后面那一段,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。 就知道老师这样写是什么意思了
2016-12-16 回复 有任何疑惑可以回复我~
#2

weibo_肖邦在对我微笑_0 回复 weibo_肖邦在对我微笑_0

而且如果按照你的想法 bytes++<=buf.length 循环一直会运行到bytes等于byte[] buf[]定义时的长度。 这是我的理解,具体会不会运行到我没试过。
2016-12-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信