字节顺序很少由软件设计者决定;它通常取决于硬件设计。字节顺序的两种类型有时被称 为字节性别,在当今被广泛使用。两种方式都具有自身的优势。Intel 处理器使用小端字节 顺序涉及。摩托罗拉的 CPU 系列、SUN 的 Sparc 工作站,以及 PowerPC 的 CPU 架构都采用 大端字节顺序。
那么Java中如何确定一个当前环境所用的CPU是何种类型的字节顺序呢。我在java.nio.Bits中看见一段代码是这样实现的,很有意思。
static {
long a = unsafe.allocateMemory(8);
try {
unsafe.putLong(a, 0x0102030405060708L);
byte b = unsafe.getByte(a);
switch (b) {
case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break;
case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break;
default:
assert false;
byteOrder = null;
}
} finally {
unsafe.freeMemory(a);
}
}
原理很简单,就是先分配8个字节Long类型的内存,然后放内存中放入16进制0x0102030405060708L的数据,判断第一个字节是0x01还是0x08,如果是0x01,则说明大端字节顺序,如果是最大的0x08,则是小端字节顺序。