【问题标题】:Issue regarding the return value of the read() function in java? [duplicate]关于 java 中 read() 函数的返回值的问题? [复制]
【发布时间】:2011-10-13 04:51:10
【问题描述】:

可能重复:
Why does InputStream#read() return an int and not a byte?

why return type of read() is integer?

嘿,我只是在浏览 java 文档以获取有关 I/O 流的材料,只是遇到了这个问题,特别是在参考字节流时 - 如果输入是字节流,为什么 read() 不返回一个字节价值?

我摸不着头脑,但想不出任何强有力的答案来回答这个问题,如果有人能提供帮助,我将不胜感激。

【问题讨论】:

    标签: java


    【解决方案1】:

    这是因为read 可以返回 -1 作为流结束 (EOF) 标记的指示符 - 即不再从流中读取字节。

    更多详情:http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html#read%28%29。具体来说:

    如果由于流的结尾已经结束而没有可用的字节 达到,返回值-1。

    【讨论】:

    • +1 你比我快 28 秒。删除了我的帖子。
    • 嘿 thnxx 链接老兄现在我能够理解这个概念了
    • 那你可以接受答案了吧?
    【解决方案2】:

    原因是read 方法也可以返回一个值-1(当到达流的末尾时)。 因此,您必须能够存储 256 个值

    有些人认为byte 的负值范围是个问题,其实这无关紧要: 一个字节的范围是0 - 255,但是在java 中,一个byte-128 - 127 的范围。但是,即使 byte 的值大于 127,您仍然可以完美地将 int 转换为 byte。它只会产生负值。

    作为证明,有一个read(byte[]) 方法在内部使用int read() 方法并将其结果转换为byte(在过滤可能的-1 值之后)。所以,这清楚地告诉我们,如果它不是 -1 值,java 毕竟会使用字节。

    一个更难的问题:“为什么不用short 而不是int?” 答案是,java 不太喜欢short。在执行基本操作时,short 通常会自动转换为int,从而引入某种不必要的矫枉过正。 使用短裤几乎没有收获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多