Java 是否以大端位顺序读取单个字节?

Does Java read a single byte in big endian bit order?

所以我们可以谈谈位序和字节序的字节顺序。 例如,当我从 FileInputStream 读取下一个字节时,我实际上得到了一个 8 位有符号整数,但我不知道 Java 计算字节整数值的位顺序是什么。哪个在前,最高有效位还是最低有效位?

(符号位, 2^6 ..... 2^0) 要么... (2^0, ..... 2^6, 符号位)

int中第一位为符号,其余为数值,最后一位为最低位。

只有当一​​个单元被分解成其他单元时,字节顺序才真正适用。因此,如果您通过比特流传输一个字节,您可以观察最低有效位是先传输还是最后传输。那时我们可以说流是 little-endian 或 big-endian.

但是在byte-addressable机器中,即字节是最小的存储单位,字节中没有"endianness"。字节的任何位都"before"字节的任何其他位。

请注意,字节序的另一个术语是 "byte order"。较大实体中的字节顺序。

我们确实喜欢对位进行编号(0 到 7,对于 8 位字节),因此我们可以讨论它们,但这实际上并没有定义字节序,即使通常选择编号来匹配机器的字节顺序;这是惯例。

关于 FileInputStream - 根据它的文档,传输字节:字节的任何部分都不会在任何其他部分之前发送,至少就 FileInputStream 而言是这样。如果必须通过某种互连(例如 SATA 电缆)按位发送字节,那么决定哪一位先发送是硬件的事情。更高层代码以字节(甚至块)为单位进行处理。