Java之中如何判断CPU是大端(Big Endian)还是小端(Little Endian)


Java之中如何判断CPU是大端(Big Endian)还是小端(Little Endian)

虽然Java之中的内存分配都Java本身都已经处理好了,不存在Big Endian和Little Endian的区别。

jvm是安装大端来处理的。

但是,在一些特殊的情况下,我们任然需要知道CPU到底是big endian或者little endian。

Java里面可以直接的调用java.nio.ByteOrder类的方法nativeOrder()方法,下面的是我的测试代码:

import java.nio.ByteOrder;

public class TestCPU {
  public static void main(String[] args) {
    if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {
      System.out.println("BIG_ENDIAN");
    } else {
      System.out.println("LITTLE_ENDIAN");
    }
  }
}

在Windows Intel上输出的结果是:
  LITTLE_ENDIAN

在AIX PPC64上面的输出结果是:

=> java TestCPU
BIG_ENDIAN


===
下面是C语言中的作法:

#include 

int main()
{
    union ut{
        short s;
        char c[2];
    }u;
    
    if(sizeof(short) == 2)
    {
        u.s = 0x0102;
        if(u.c[0] == 1 && u.c[1] == 2)
        {
            printf("big enidan.\n");
        } else if(u.c[0] == 2 && u.c[1] == 1)
        {
            printf("little endian.\n");
        }
    }
    return 0;
}