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){

        }

 

posted @ 2019-11-04 10:52  dybe  阅读(2876)  评论(0编辑  收藏  举报