有符号与无符号只是解释位模式的问题,而不是位模式本身.
因此,只要整数在0到255范围内,就可以将它们插入字节并将字节写入文件.
但是,由于Java将字节位模式解释为已签名,因此在重新读取时必须小心.
例如,假设你有整数253.这是(完整的32位形式):
00000000000000000000000011111101
如果你这样做:
int i = 253;
byte b = (byte) i;
然后b将包含位:
11111101
如果你要求Java使用它,Java将声称它是-3,因为当将位解释为signed时,-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;