Java 大小端转换(基于ByteBuffer)
成都java语言大小端的基础知识:
小端( little-endian):低位字节在前,高位字节在后。大端( Big-Endian),则反之。具体而言,就是为了说清楚,CPU架构1字(word)中byte的存储顺序。计算机内存中数据自然的顺序就是:低位先来,高位后到
JAVA中所有的二进制文件都是按大端存储,这种存储方式也被称为network order。即在所有的平台上,如Mac、 PC、UNIX等等运行JAVA,都不用考虑大小端的问题。麻烦的是不同语言开发的程序进行数据交换,如笔者最近的项目,二进制文件是由C生成的,通过redis消息通道以Json格式发过来,而C语言默认是小端模式。有些平台(如Mac、IBM 390)内置用的大端模式,有些平台内置用的小端模式(如Intel)。JAVA帮你屏蔽了各平台字节顺序的差异。开心呀
例如,32位16进制的 0x45679812在内存中如下存储:
基于ByteBuffer(可通过Order来设置大端或者小端,默认为大端 —— Big-Endian),代码实现如下图(支持网络端口——2字节及4字节的int转换):