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

时间:2016-05-19 08:45:05

标签: java arrays byte fileinputstream

我不知道这是不是一个错误,或者我在这里缺少一些东西。我正在尝试获取文件的确切字节,以便我能够处理一些文件。

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

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

一个字节怎么能是32位?

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

提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

字节和整数都用Java签名。

负值存储为两个补码。

因此-1字节表示为'1111 1111'。这被转换为-1 int,表示为'1111 1111 1111 1111 1111 1111 1111 1111',这就是你所看到的。

如果您有一个字节b并希望看到其精确的逐位表示,则需要执行((int) b) & 0xFF

这会将您的字节转换为int,并将该新int的第一个字节“上方”的所有位重置为零。

答案 1 :(得分:1)

您正在调用Integer.toBinaryString(),其中包含int个参数。

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