今天在讀《Java網絡編程》這本書的第二章 流 時,看到書中有一個地方關於int強制轉換為byte類型時應注意的地方。這個地方有點細節,不過就應該把這種細節把握住。
情況是這樣的,講到InputStream的抽象方法read時,說到read返回一個int型,但實際是一個byte型的數據。這點從API也能考證。如圖:
那么問題來了,int占4個字節,byte占1個字節,我們循環讀取的時候將int型數組強制類型轉換成byte時,會發生什么情況呢?代碼如下:
1個字節占8位,既然實際返回的是byte類型的數據,那么強制類型轉換int型截取低8位,對數據也不會造成影響。問題就出現在,如果再從byte型轉換成int型呢?代碼如下:
此時,j輸出為-106。
這是因為在int強制轉換為byte型數據時,會產生一個-128~127的有符號字節,而不是read方法返回的0~255的無符號字節。這個時候要注意代碼應修改為:
一個小問題,重在積累。
這是一個能給程序員加buff的公眾號