在網絡傳輸的過程中,字節存在倆種序列方式,即大端序和小端序。
舉例來說,數值0x2211使用兩個字節儲存:高位字節是0x22,低位字節是0x11。
大端字節序:高位字節在前,低位字節在后,這是人類讀寫數值的方法。
小端字節序:低位字節在前,高位字節在后,即以0x1122形式儲存。
咱們拿一個數字886來舉例子:
888的二進制為: 【0000 0000】 【0000 0000】【0000 0011】 【0111 1000】,以字節單位打印出來為: [0, 0, 3, 120] ,這種方式就是大端序。
如果按照小端序那么888的二進制為: 【0111 1000】 【0000 0011】 【0000 0000】【0000 0000】,以字節為單位打印出來為:[120, 3, 0, 0],這種方式就是小端序。
Netty大端序寫入:[0, 0, 3, 120]
ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(4); buf.writeInt(888); byte[] n = new byte[4]; System.out.println(buf.readBytes(n)); System.out.println(Arrays.toString(n));
Netty小端序寫入:[120, 3, 0, 0]
ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(4); buf.writeIntLE(888); byte[] n = new byte[4]; System.out.println(buf.readBytes(n)); System.out.println(Arrays.toString(n));