在java中,如何将整数写入文件,使它们是无符号的8位整数(在0到255范围内)?这些数字是int类型并且在0-255之内是否足够,或者我是否需要先将它们转换为其他类型?我认为这是一回事吗?但是我不确定当它们被放入档案中时是否会发生一些有趣的事情......
答案 0 :(得分:10)
有符号与无符号只是解释位模式的问题,而不是位模式本身。
因此,只要您的整数在0
到255
范围内,就可以将它们插入字节并将字节写入文件。
但是,由于Java将字节位模式解释为已签名,因此在重新读取它们时必须小心。
例如,假设您有整数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;
答案 1 :(得分:2)
DataOutputStream.writeByte()
会将int
写为1字节值。