Bal*_*usC 54

因为a byte只能保持-128直到127,而它应该返回0到255(当没有字节时返回-1(即EOF)).即使它返回byte,也没有代表EOF的余地.

一个更有趣的问题是它为什么不回归short.

  • +1为什么不返回"短"呢?:) (12认同)
  • @dogbane,@ BalusC - 我猜因为int比short短.简而言之,指令集相当有限,因此JVM无论如何都会将其视为int.参考:http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#7565 (4认同)
  • 如果在`InputStream`的实现中返回`byte`(隐式强制转换),请不要忘记将`&0xFF`应用于返回值(除非返回`EOF`).否则,您将返回一个签名值,这可能在第一眼看上去但确实完全被破坏了. (3认同)
  • 或者是未签名的char. (2认同)

Edw*_*uck 17

它返回一个int,因为当无法再读取流时,它返回-1.

如果它返回一个字节,则无法返回-1表示缺少输入,因为-1是一个有效字节.此外,由于Java只处理带符号的字节,因此无法返回高于127或低于-128的值.

很多时候,当一个人正在读取文件时,您需要处理代码的无符号字节.要获得介于128和255之间的值,可以使用short,但通过使用int,您可以更有效地将内存寄存器与数据总线对齐.因此,使用int并不会真正丢失任何信息,您可能会获得一些性能.唯一的缺点是内存的成本,但很可能你不会长时间停留在那个int上(因为你将处理它并将其转换为char或byte []).

  • 它返回一个int,因为当*EOF*出现时它返回-1.发生错误时会抛出异常. (3认同)

Nan*_*nne 5

所以它可以返回 "-1" 。当没有更多字节要读取时,它必须这样做。

你不能让它有时返回一个字节和 -1 为 EOF/nobyte/什么,所以它返回一个 int ;)