在的InputStream類java.io. *包的:一個字節被如何存儲在整數
INT讀()拋出,因爲它是字節流類下IOException的
讀()返回一個字節,但它存儲在整數中,沒有任何錯誤。
爲什麼這樣?以及它是如何發生的。幫我的內存分配設計也
在的InputStream類java.io. *包的:一個字節被如何存儲在整數
INT讀()拋出,因爲它是字節流類下IOException的
讀()返回一個字節,但它存儲在整數中,沒有任何錯誤。
爲什麼這樣?以及它是如何發生的。幫我的內存分配設計也
您可以自由向上轉換(從使用少字節到使用更多字節的原始的),因爲你失去任何信息(你可以把一個小東西一個大容器)。
只有當你向下轉換(從使用更多字節到使用少字節的原始的),您必須顯式轉換(當你把一個大的事情在一個小容器,你的風險切斷一些東西以使其適合)
Java中的int
是32位。 Java中的byte
是8位。請嘗試以下代碼:
byte foo = 5;
int intFoo = foo;
Java允許您免費提供基元,因爲這樣做不會丟失任何信息。
的上下文由javadoc的,它說給出:
「中讀取數據的從輸入流的下一個字節的字節值被返回作爲int範圍爲0到255,如果。沒有字節可用,因爲已到達流的末尾,則返回值-1。「
在引擎蓋下,read
方法要麼有一個字節返回或流是在EOF位置。返回值因此可以有257個可能的狀態,並且(顯然)不會適合byte
。 API通過返回一個int
來處理這個問題,按照我上面引用的javadoc摘錄的指定進行編碼。
我沒有看過的代碼,但我希望它是隱約的東西像這樣:
if (eof) {
return -1;
} else {
// Casting to an int sign extends to 32 bits,
// and we then take the bottom 8 bits.
return ((int) someByte) & 0xff;
}
當你得到的結果,你需要做這樣的事情:
int res = is.read();
if (res == -1) {
// handle EOF case ...
} else {
byte b = (byte) res;
// handle the byte ...
}
還幫我一下內存分配設計。
沒有內存分配問題。 byte
和int
類型是原始類型。
從技術上講,「字節」是無符號的,而Java的「字節」是有符號的。所以雖然它是8位的「字節」,但它不像Java的原始類型那樣是「字節」。 – 2012-03-17 08:49:55