关于字节流(byte流)读取大小端的问题

大小端问题,是指在内存中(注意是内存,不是硬盘)以 字节为单位的排列顺序,与cpu和操作系统有关,操作系统可以选择大小端,java默认读取按大端读取。

大端:高位存在低地址,低位存在高地址;
小端:高位存在高地址,低位存在低地址;

  举个例子,从内存地址0x0000开始有以下数据
        0x0000    0x12
        0x0001    0x34
        0x0002    0xab
        0x0003    0xcd

    
        如果我们去读取一个地址为0x0000的四个字节变量:
        若字节序为big-endian,则读出结果为0x1234abcd;
        若字节序位little-endian,则读出结果为0xcdab3412.

        如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为:
                         big-endian      little-endian
        0x0000          0x12                  0xcd
        0x0001          0x23                  0xab
        0x0002          0xab                  0x34
        0x0003          0xcd                  0x12

        
        Intelx86系列以及ARM系列CPU都是little-endian的字节序.

 

python 查看操作系统大小端,python -c "import sys; print(sys.byteorder)";如果输出little表示小端存储

java 中有两个byte ,byte b[]=[0xcd,0xab],按小端读取就变成[0xab,0xcd]

 

你可能感兴趣的:(关于字节流(byte流)读取大小端的问题)