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

为什么要读到-1就结束,读到别的不行么,不是很懂

为什么要读到-1就结束,读到别的不行么,不是很懂

while ((c = bis.read()) != -1) {

bos.write(c);

bos.flush();// 刷新缓冲区


正在回答

6 回答

read

public abstract int read()
                 throws IOException

从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

子类必须提供此方法的一个实现。


返回:

下一个数据字节;如果到达流的末尾,则返回 -1。

抛出:

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

从API的理解来看,read是每次读取一个byte,byte只有8位,范围就是0-255,只不过read将他作为一个32位的int值返回出来,正常情况时不可能返回负数的,所以返回一个负数肯定是特殊情况了。这是我的理解,希望对你有帮助。

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

书上写的一个返回整型的方法就不能简单的通过返回-1表示错误,因为-1很可能是一个完全合法的结果。

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

不会的,你建议去看看这个方法的API,说再多都不如看这个方法的源代码来的有效

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

方法定义是,当文件没有可读取内容时 返回-1,也就是文件已经读完后返回-1。

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

詹士

那有没有可能那个文件里面刚好有个-1,然后把-1读出来之后赋给c,然后发现与右边的-1相等就提前结束程序了呢?
2015-10-01 回复 有任何疑惑可以回复我~

方法定义就是这样的,我们只能后接受。

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

.read()这个方法是读取的意思。如果有值就返回1 没有值得话返回-1

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

詹士

这里应该是有值就直接返回那个值,而不是返回1吧。 如果照你那样说,下面的bos.write(c);岂不是每次都写入1了?
2015-10-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么要读到-1就结束,读到别的不行么,不是很懂

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