2012-12-08 120 views
0

嘿我不能找出這裏有什麼問題。簡單的寫入和讀取字節

寫入文件:

byte[] dim = new byte[2]; 
dim[0] = (byte) deImgWidth; // Input 384 
dim[1] = (byte) deImgHeight; // Input 216 
out.write(dim); 

從文件中讀取

byte[] file = new byte[(int) f.length()]; 
FileInputStream fs = new FileInputStream(f); 
fs.read(file); 
deImgWidth = ((file[0]) & 0xFF); // output 128 
deImgHeight = ((file[1]) & 0xFF); // output 216 

爲什麼我能獲得相同的deImgHeight值,但不一樣的deImgWidth價值?

+0

'deImgWidth'出來是什麼? –

+0

@Cthulhu在:384,出:128 – AlexCheuk

回答

6

384不符合無符號字節,而216符合。這就是爲什麼在投射前者時你必須失去信息。

Narrowing conversions只是保留一個數字的最低位,所以如果在讀取值時執行額外的& 0xFF,以後可以恢復符號(因爲Java使用二進制補碼來表示負數)。 216 = 0b11011000(適合8位)可以無損地轉換,但是384 = 0b110000000(即9位) - 當您取低8位時,您最終會得到128.