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

来源:4-5 字节缓冲流

hengly

2015-07-15 17:49

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

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

bos.write(c);

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


写回答 关注

6回答

  • yangyang533
    2017-12-24 19:50:12

    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值返回出来,正常情况时不可能返回负数的,所以返回一个负数肯定是特殊情况了。这是我的理解,希望对你有帮助。

  • 岳阳白少
    2015-12-01 14:13:13

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

  • 麦尔丹
    2015-10-01 16:55:58

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

  • 麦尔丹
    2015-08-24 13:39:21

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

    詹士

    那有没有可能那个文件里面刚好有个-1,然后把-1读出来之后赋给c,然后发现与右边的-1相等就提前结束程序了呢?

    2015-10-01 15:58:19

    共 1 条回复 >

  • LifeRealm
    2015-07-22 19:10:17

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

  • ybbzbb
    2015-07-15 21:24:32

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

    詹士

    这里应该是有值就直接返回那个值,而不是返回1吧。 如果照你那样说,下面的bos.write(c);岂不是每次都写入1了?

    2015-10-01 16:01:42

    共 1 条回复 >

文件传输基础——Java IO流

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

133755 学习 · 1030 问题

查看课程

相似问题