java内存,大端小端判断
Posted dYb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内存,大端小端判断相关的知识,希望对你有一定的参考价值。
一,简介
在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,
除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,
也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,
即就是大于8位的处理器,由于寄存器的宽度大于一个字节,
那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。
大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址端。
小端模式,是指数据的高字节保存在内存的高地址中,低位字节保存在在内存的低地址端。
优势,劣势:
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
二,java判断大端小端示例:
long a = UNSAFE.allocateMemory(8); try { UNSAFE.putLong(a, 0x0102030405060708L); //存放此long类型数据,实际存放占8个字节,01,02,03,04,05,06,07,08 byte b = UNSAFE.getByte(a); //通过getByte方法获取刚才存放的long,取第一个字节 //如果是大端,long类型顺序存放—》01,02,03,04,05,06,07,08 ,取第一位便是0x01 //如果是小端,long类型顺序存放—》08,07,06,05,04,03,02,01 ,取第一位便是0x08 switch (b) { case 0x01: ByteOrder byteOrder = ByteOrder.BIG_ENDIAN; break; case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break; default: assert false; byteOrder = null; } }catch (Exception e){ }
以上是关于java内存,大端小端判断的主要内容,如果未能解决你的问题,请参考以下文章