Java:将整数作为无符号8位整数写入文件

5
在Java中,我如何将整数写入文件,以使它们成为无符号8位整数(范围在0到255之间)?这些数字是否足够使用int类型且在0-255范围内,还是需要先将它们转换为其他类型?我认为这只是相同的事情?但我不确定当它们被放置在文件中时是否会出现一些有趣的事情...
2个回答

10

有符号和无符号只是处理位模式的方式不同,而不是位模式本身不同。

因此,如果你的整数在 0255 范围内,你可以将它们转换成字节并写入文件中。

然而,由于 Java 将 byte 位模式解释为有符号数,所以读取回来时需要小心。

例如,假设你有一个整数 253。 在完整的32位形式下,它是:

00000000000000000000000011111101
如果你这样做:
int i = 253;
byte b = (byte) i;

那么b将包含以下比特位:

11111101

如果您请求Java使用此内容,Java将声称它是-3,因为在将位解释为有符号时,-3表示为模式11111101。因此,如果您将该字节写入文件,则位11111101将被写入文件中,正如所需的那样。

同样,当您在读取文件时将其读回到字节中时,您读取到的字节将填充位模式11111101,再次Java将把它解释为-3。因此,您不能只做以下操作:

byte b = readByteFromFile();
int i = b;

因为Java将解释b的内容为-3,并将给您表示-3的整数作为32位整数,其结果为:

11111111111111111111111111111101

相反,您需要掩码以确保最终得到的整数是:

00000000000000000000000011111101
所以,
byte b = readByteFromFile();
int i = (0x000000FF) & b;

这是否意味着:short s = (0x00FF)&b;? - Brian
@Brian int i = ((int)b) & 0xff; => int i = ((int)b) & 0xff; - Pierre

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接