在java中查找系统的字节序

2022-09-02 23:30:42

我发现检查器的算法(int C)如果机器是大不列颠或小印第安人是

int is_big_endian(void)
{
    union {
        uint32_t i;
        char c[4];
    } bint = {0x01020304};

    return bint.c[0] == 1; 
}

我怎么能在*java中找到这样的东西?*我不想使用内置的libs,因为这是一个面试问题。我想在java中找到它。


答案 1

我对此没有任何功劳,但是您可以尝试:

import java.nio.ByteOrder;

if (ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN)) {
  System.out.println("Big-endian");
} else {
  System.out.println("Little-endian");
}

答案 2

我怎么能在*java中找到这样的东西?*我不想使用内置的libs,因为这是一个面试问题。我想在java中找到它。

在纯Java中,如果不调用库,就无法做到这一点。这是因为;

  • Java说,如果你能避免这样的事情,你就不应该关心它。
  • Java作为一种语言的功能相对较差,并且依赖于其库来做很多事情,这些事情可能是另一种语言中的语言功能。
  • 大多数人不区分语言的作用和内置库,因为这种区别很少有用。
  • 字节码/虚拟机本身不是大端序或小字节序,只有真正的实现才是。;)

较旧的库仅支持大端序(大多数处理器都使用,英特尔是一个值得注意的例外)较新的库可以以某种方式设置。

非常罕见的是,你需要知道如何再次重写内置功能,如果你这样做了,你会阅读关于如何完成的代码(即使你确实知道如何完成它)

我见过很多人重新开发内置功能,这些功能是错误的,更难使用,因为它以意想不到的方式运行,并且性能低于内置库。写一些比JDK中更快或更定制的东西是很有可能的,但是知道你的头顶上怎么做很少有用。

我确实不时收到这些问题,在回答问题之前,我会指出你不会这样做的所有原因。;)


推荐