是指占用記憶體多於乙個位元組型別的資料在記憶體中的存放順序。
但是,網路傳輸、檔案儲存、人類讀寫習慣使用大端位元組序。
j**a中乙個int型資料占用4個位元組,假如有乙個16進製制的int數,int value =(高位元組) 0x01020304 (低位元組)
主機位元組序跟cpu有關的,ia架構(intel、amd)的cpu中是little-endian
所謂的j**a位元組序指的是在j**a虛擬機器中多位元組型別資料的存放順序,j**a位元組序也是big-endian。
由於jvm會根據底層的作業系統和cpu自動進行位元組序的轉換,
所以我們使用j**a進行網路程式設計,幾乎感覺不到位元組序的存在。
publicbig_endian 記憶體資料 [1, 2, 3, 4]static
void
byteorder()
little_endian 記憶體資料 [4, 3, 2, 1]
如果通訊的雙方都是j**a,則根本不用考慮位元組序的問題了。
j**a 的 byte 範圍是[-128, 127],
j**ascript 的 byte 範圍是[0, 256]
轉換時使用相同的位元組序
//五生成4個位元組的網路位元組序,網路傳輸使用大端位元組序,相當於int2bytearray
byte getnetworkbytesorder(int
sourcenumber)
//還原4個位元組的網路位元組序, 相當於bytearray2int
int recovernetworkbytesorder(byte
orderbytes)
return
sourcenumber;
}
system.out.println(arrays.tostring(inttobytearray(32)));輸出[0, 0, 0, 32]system.out.println(arrays.tostring(inttobytearray(145)));
system.out.println(arrays.tostring(inttobytearray(256)));
system.out.println(arrays.tostring(inttobytearray2(32)));
system.out.println(arrays.tostring(inttobytearray2(145)));
system.out.println(arrays.tostring(inttobytearray2(256)));
//還原
system.out.println(bytearraytoint2(inttobytearray2(145)));
system.out.println(bytearraytoint(inttobytearray2(145)));
[0, 0, 0, -111]
[0, 0, 1, 0]
[0, 0, 0, 32]
[0, 0, 0, -111]
[0, 0, 1, 0]
145145
publicstatic
byte inttobytearray(int
i)
public
static
byte inttobytearray2(int
i)
public
static
int bytearraytoint2(byte
bytearray)
return
value;
}public
static
int bytearraytoint(byte
bytearray)
主機位元組序與網路位元組序
主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的位元組序 位址...
網路位元組序與主機位元組序
1 本地位元組序 由 於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 bi...
網路位元組序與主機位元組序
網路位元組序與主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的...