2011-01-11 202 views

回答

45

因为byte只能容纳-128到127,而它应该返回0直到255(没有字节(即EOF)时为-1)。即使它返回byte,也不会有代表EOF的空间。

更有趣的问题是为什么它不返回short

+6

+1为什么不返回“short”呢? :) – dogbane 2011-01-11 16:09:57

2

因为EOF(文件结尾或通常数据结束)不能用char表示。

+0

您不能使用字节和-1,因为这个值是正确的并且可能出现在数据中。 – wesoly 2011-01-11 16:12:34

+0

它不能用`byte`来表示,因为没有带外值可用。它*可以用任何宽于8位的数据类型表示。 – EJP 2015-07-05 09:28:18

4

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

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

15

它返回一个int,因为当流不能再被读取时,它返回-1。

如果它返回一个字节,则-1不能返回以指示错误,因为-1是有效字节。另外,由于Java只能处理有符号的字节,所以你不能返回127或者低于-128的值。

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

1

如Java文档在InputStream#read,中所说的值字节在0到255的范围内返回为int。也就是说字节值[-128〜127]已被更改为int值[0〜255],所以返回值可以用来表示流的结束。

0

追加到BalusC answer

  • 不是byte以允许[0; 255]作为主要容量和additionaly -1作为EOF导致
  • int用于调整结果机字(的主要要求到I/O操作中的一个 - 速度,所以应该尽可能快地工作可能!)

不使用异常,因为它们非常慢!

相关问题