JVM内存中是java char大端吗?

时间:2012-07-26 09:26:11

标签: java jvm endianness

JVM内存中是否有java char大端[stack / heap]?那是UTF-16 LE还是UTF-16 BE?

我认为这真的不应该那么重要,它取决于JVM实现并保持perf的本机芯片顺序。原因。这是英特尔的LE等。这是正确的吗?

或者它是在Java规范中指定的。本身?

4 个答案:

答案 0 :(得分:5)

类文件格式指定所有项目必须为big-endian。 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

我没有检查过,但我怀疑JNI规范还谈到了endian-ness,我怀疑它是big-endian。

答案 1 :(得分:2)

Java,这种语言,与字节顺序无关。 (JVM实现可能使用硬件字节序。)

将字符转换为字节序列的不同方式具有固定的字节序,例如, DataOutputStream

答案 2 :(得分:0)

它没有由VM规范指定,而是由VM决定如何处理它。

由于没有直接的方法将char重新解释为两个byte值,您甚至无法看到Java程序决策的结果(任何Java应用程序的行为都完全相同在一致的VM上,独立于VM的字节顺序。)

答案 3 :(得分:0)

根据处理器的硬件,单个字符串可以是小端或大端。大多数英特尔/ AMD / ARM处理器使用little-endian和Sparc / Alpha使用big-endian。

UTF-16编码是Java在字符串中存储代码点(字符最大为0x1FFFF)的方式。 UTF-16LE编码指的是如何将这样的字符串写入文件。