在 java 中,如何将整数写入文件,使它们成为无符号 8 位整数(在 0 到 255 范围内)?这些数字是 int 类型并且在 0-255 之间就足够了,还是我需要先将它们转换为其他类型?我认为这只是同一件事吗?但我不确定当它们被放入文件时是否会发生一些有趣的事情......
问问题
12724 次
2 回答
10
有符号与无符号只是位模式如何解释的问题,而不是位模式本身。
因此,只要您的整数在 to 范围内0
,255
您就可以将它们塞入字节并将字节写入文件。
但是,由于 Java 将字节位模式解释为已签名,因此在读回它们时必须小心。
例如,假设您有整数253
。这是(完整的 32 位形式):
00000000000000000000000011111101
如果你这样做:
int i = 253;
byte b = (byte) i;
然后b
将包含以下位:
11111101
如果您要求 Java 使用它,Java 会声称这是-3
因为当将位解释为有符号时,-3
它表示为 pattern 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;
于 2012-05-25T14:47:54.817 回答
2
DataOutputStream.writeByte()
将写入int
1 字节的值。
于 2012-05-25T14:32:42.623 回答