Joe*_*ool 30 java virtual-machine endianness
Java在其虚拟机中使用了什么字节顺序?我记得在哪里读取它取决于它运行的物理机器,然后我读到的其他地方,我相信它始终是大端.哪个是对的?
coo*_*ird 31
class文件中的多字节数据存储为big-endian.
来自Java虚拟机规范,Java SE 7 Edition,第4章:class文件格式:
类文件由8位字节流组成.所有16位,32位和64位数量分别通过读取两个,四个和八个连续的8位字节构成.多字节数据项始终以big-endian顺序存储,其中高字节首先出现.
此外,如果字节码指令中的操作数跨越多个字节,则它也是大端的.
从Java虚拟机规范,Java SE 7版,第2.11节:指令集汇总:
如果操作数的大小超过一个字节,则它首先以big-endian order-high-order字节存储.例如,局部变量的无符号16位索引存储为两个无符号字节,
byte1并且byte2其值为(byte1 << 8) | byte2.
所以是的,我认为可以说Java虚拟机使用的是big-endian.
Tom*_*ine 18
存储在正在运行的进程中的实际工作数据几乎肯定会与执行进程的字节顺序相匹配.通常文件格式(包括类文件)将按网络顺序(大端).
通常很难分辨机器在底下做什么,因为它被虚拟机抽象出来.你不能施放short[]到byte[],你可以在C和C++.java.nio.ByteOrder.nativeOrder()应该为您提供底层的endianess.使用非字节NIO缓冲区时,匹配的字节顺序非常有用.