Java 比特流读取顺序

Java 比特流读取顺序,java,java-io,Java,Java Io,我在手册中读到: 对于面向位的交付,位 字节流格式的顺序为 指定以的MSB开头 第一个字节,转至 第一个字节,后跟 第二字节等 在我的应用程序中,我必须处理bits。 (例如,我有十进制数5,二进制格式看起来像00000101) 那么,这是否意味着(根据手册)我读取的位的顺序是 <= 0 <= 0 <= 0 <= 0 <= 0 <= 1 <= 0 <= 1 (first read bit I read is 0, second is 0 etc..

我在手册中读到:

对于面向位的交付,位 字节流格式的顺序为 指定以的MSB开头 第一个字节,转至 第一个字节,后跟 第二字节等

在我的应用程序中,我必须处理bits。 (例如,我有十进制数5,二进制格式看起来像00000101) 那么,这是否意味着(根据手册)我读取的位的顺序是

<= 0 <= 0 <= 0 <= 0 <= 0 <= 1 <= 0 <= 1 (first read bit I read is 0, second is 0 etc....)

在Java中,读取和写入字节流的默认方法将自动默认为网络字节顺序,因此您可能可以选择。

如果流中的第一个字节是
0x7D,0x01
,则比特流开始
0,1,1,1,1,0,1,0,0,0,0,0,1

    MSB:最高有效位
  • 最低有效位

因此,对于5(00000101),左边的位(代表27)是“最高有效”,右边的位(代表20)是“最低有效”。因此,是的,希望0是第一位。

字节顺序通常被称为endian。有大端系统和小端系统

大端位首先是最高有效位,而在小端位中,最低有效位是第一位

大多数网络流量是big-endian。X86机器总是小端


是有关endian ness的更多信息

谢谢,但我正在处理字节流的低级解析,所以我必须理解字节中位的顺序。我想你不会。只需使用返回单个字节的调用。@stem:我不理解0x7D,0X01。请您解释一下。@Suresh:如果流中的第一个字节有十六进制值
7D
(=decimal 125),第二个字节有十六进制值
01
(=decimal value 1),那么比特流开始
0,1,1,1,1,1,0,1,0,0,0,1
。这更清楚了吗?@Suresh:看,首先你从ByteInputStream读取一个字节,它将是0x7D。如果字节流格式的位顺序指定为以字节的MSB开头,则转到字节的LSB,可以说该字节中的位顺序为011111101。在相反的情况下,您必须解释字节10111110中的这种位顺序,“字节中的位顺序”指定从字节中提取位的顺序-从尾部或从头部。感谢大家的解释。如何确定接收到的字节是大端还是小端?这有点误导。仅仅因为X86机器是little-endian,任何符合RFC的网络流量都将仍然是“网络字节顺序”——即big-endian。
<= 1 <= 0 <= 1 <= 0 <= 0 <= 0 <= 0 <= 0 (first read bit I read is 1, second is 0 etc....)