JVM 内存 [stack/heap] 中的 java char big endian 吗?那是 UTF-16 LE 还是 UTF-16 BE?
我认为这真的不应该那么重要,这取决于 JVM 实现并保持本机芯片顺序以获得性能。原因。那是英特尔等的LE。对吗?
或者它是在 Java 规范中指定的。本身?
JVM 内存 [stack/heap] 中的 java char big endian 吗?那是 UTF-16 LE 还是 UTF-16 BE?
我认为这真的不应该那么重要,这取决于 JVM 实现并保持本机芯片顺序以获得性能。原因。那是英特尔等的LE。对吗?
或者它是在 Java 规范中指定的。本身?
类文件格式指定所有项目必须是大端。 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
我还没有检查过,但我怀疑 JNI 规范也谈到了字节序,我怀疑它是大字节序的。
Java 是一种与字节序无关的语言。(JVM 实现可能使用硬件字节序。)
但是,将字符转换为字节序列的不同方法具有固定的字节顺序,例如DataOutputStream
.
它不是由 VM 规范指定的,取决于 VM 如何处理它。
而且由于没有直接的方法可以重新解释char
为两个byte
值,您甚至看不到 Java 程序的决定结果(任何 Java 应用程序在符合标准的 VM 上的行为完全相同,与 VM 的字节序无关) .
根据处理器的硬件,单个 char 是 little-endian 或 big-endian。大多数 Intel/AMD/ARM 处理器使用 little-endian,Sparc/Alpha 使用 big-endian。
UTF-16 编码是 Java 在字符串中存储代码点(最多 0x1FFFF 的字符)的方式。UTF-16LE 编码是指如何将这样的字符串写入文件。