2011-01-11 98 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操作中的一個 - 速度,所以應該儘可能快地工作可能!)

不使用異常,因爲它們非常慢!

相關問題