在android開發中我們會碰到文件的傳輸,這個時候我們就會牽涉到數據的傳輸。比如一個文件的大小是1024kb,此時數據類型是int,而網絡上的數據都是byte數據流,這就需要一個int-> byte[]的方法了。。好了直接上個簡單的例子。
public class Integer2Byte {
public static void main(String[] args) throws Exception {
int i = 1989;
byte[] buf = i2b2(i);
for(byte b : buf) {
System.out.print(b+" " );
}
}
//算法是用來幹嘛的,就是爲了提升性能啊,哈哈!
public static byte[] i2b1(int i) {
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}
//第二種方法相信大家看了,然後查下api就知道了。
public static byte[] i2b2(int i) throws Exception {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(buf);
out.writeInt(i);
byte[] b = buf.toByteArray();
out.close();
buf.close();
return b;
}
}
在這裏大家又會疑問到爲什麼要與0xFF進行與運算呢??自己看了以前的資料和網上的資料後總結了下,相信對我們基礎知識薄弱的人還是有點幫助的。
原因在於:
1.byte的大小爲8bits而int的大小爲32bits
2.java的二進制採用的是補碼形式
3.0xff默認是整形,所以,一個byte跟0xff相與會先將那個byte轉化成整形運算,這樣,結果中的高的24個比特就總會被清0,於是結果總是我們想要的。
舉個簡單的例子說明下:
當一個byte會轉換成int時,由於int是32位,而byte只有8位這時會進行補位,
例如補碼11111111的十進制數爲-1轉換爲int時變爲11111111111111111111111111111111,即0xffffffff但是這個數是不對的,這種補位就會造成誤差。
和0xff相與後,高24比特就會被清0了,結果就對了。