爲什麼read()方法返回的是int類型而不是byte

//爲什麼read()方法返回的是int類型而不是byte

1個字節8位,(byte)

4個字節32位,(int)

byte -1 —>int -1(將byte提升爲int)

byte 是1一個字節,即8位,如果取到連續11111111 (8個1)

爲了避免讀到連續8個1(就是-1)和定義的結束標記-1相同(read()返回-1就是讀到末尾)。

所以在保留11111111的基礎上,在轉成int類型時,前面24位補0而不補1.

如果是補1

11111111 11111111 11111111 11111111

不還是-1?是-1的原因是因爲前面24位補的是1,只要在前面補0,

既可以保留原字節數據不變(最低8位),又可以避免-1的出現。

11111111 11111111 11111111 11111111

&00000000 00000000 00000000 11111111


00000000 00000000 00000000 11111111

//那提升爲int 讀一個字節不就變成4個字節了麼?那往外寫的時候大小不就變成原來數據的4倍了麼?

答:read 方法在提升的同時保證了不出現-1的情況,但是write有一個強轉動作,就是取最低8位,

所以說寫出去的還是有效數據,保證原數據沒有變化!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章