android網絡開發細節總結一

      在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了,結果就對了。
   

    

    

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章