时间记录:2020-1-22
问题描述:在接受别人传递过来的字节数组的时候,然后发现数据和其的测试程序表现的不一致,通过打印16进制的数据来看发现,数据的顺序是颠倒的,想到了字节的顺序问题,也就是大端序和小端序。
字义解释:
数据存储在内容中,是以什么样的字节顺序,也就是指是从高位还是地位开始存储的,一般情况相下都是以小段序的来存储,也就是从低位开始存储的,但是在网络传输过程中,都是默认的以大端序来传递的,也就是从高位开始,我们再发送数据的时候回将小端序转换为大端序,然后在进行发送的操作。而有的时候由于机器的特殊性,导致到数据的顺序不一致,就需要自己进行约定操作。java中默认是以大端序来进行的
相关操作:
在java中也提供了类似的API,将自己以什么样的顺序来进行展示的操作
/**
* Modifies this buffer's byte order.
*
* @param bo
* The new byte order,
* either {@link ByteOrder#BIG_ENDIAN BIG_ENDIAN}
* or {@link ByteOrder#LITTLE_ENDIAN LITTLE_ENDIAN}
*
* @return This buffer
*/
public final ByteBuffer order(ByteOrder bo)
/**
* Constant denoting big-endian byte order. In this order, the bytes of a
* multibyte value are ordered from most significant to least significant.
*/
public static final ByteOrder BIG_ENDIAN
= new ByteOrder("BIG_ENDIAN");
/**
* Constant denoting little-endian byte order. In this order, the bytes of
* a multibyte value are ordered from least significant to most
* significant.
*/
public static final ByteOrder LITTLE_ENDIAN
= new ByteOrder("LITTLE_ENDIAN");
注意,通常情况下不需要考虑这个顺序的问题,只要按照正常流程就可以了。除非是什么特殊的情况,像展示信息的需要转换成大家能够理解的模式。
如何验证这个问题
大致上就是分配一段自己知道的内存,然后读取第一个字节,看是什么,就可以了。
总结: 记住这个问题就可以了,属于一些小的细节部分。
时间记录:2020-1-31
来源:CSDN
作者:huoruilin
链接:https://blog.csdn.net/justinhuo/article/details/103894169