JVM内存中是否有java char大端[stack / heap]?那是UTF-16 LE还是UTF-16 BE?
我认为这真的不应该那么重要,它取决于JVM实现并保持perf的本机芯片顺序。原因。这是英特尔的LE等。这是正确的吗?
或者它是在Java规范中指定的。本身?
答案 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编码指的是如何将这样的字符串写入文件。