Java FileInputStream 将 3-4 个字节放入字节数组的相同索引中?

Java FileInputStream puts 3-4 bytes in same index of byte array?

我不知道这是一个错误还是我遗漏了什么here.I正在尝试获取文件的确切字节以便我可以处理一些文件。

所以我有一个 byte[1024] 数组来获取它的前 1024 个字节,一个 char[1024] 数组,我正在对每个字节执行 Integer.toBinaryString 以查看它的值

但在某些位置,不是8位字节,而是像index[20]=11111111111111111111111111111111这样的值 索引[21]=1111111111111111111111111111110

一个字节怎么可能是32位的?

在这种情况下,它应该是一个 UTF-16 BOM,根据我的测试,它应该是 255 254 ,所以每个索引的最后 8 个应该在那里

提前感谢您的帮助

您正在调用 Integer.toBinaryString(),它需要一个 int 参数。

您传入的 byte 会自动转换为 intint 有 4 个字节,因此你得到你看到的 32 位。

字节和整数都在 Java 中签名。

负值存储为二进制补码。

所以-1字节表示为'1111 1111'。这将转换为 -1 int,表示为 '1111 1111 1111 1111 1111 1111 1111 1111',这就是您所看到的。

如果您有一个字节 b 并且想要查看其精确的逐位表示,您需要执行 ((int) b) & 0xFF.

这会将您的字节转换为 int 并将所有位 "above" 新 int 的第一个字节重置为零。