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

java:将整数作为无符号8位整数写入文件,java,integer,unsigned,Java,Integer,Unsigned,在java中,如何将整数写入文件,使其成为无符号8位整数(范围为0到255)?数字类型为int且在0-255范围内就足够了吗,还是需要先将它们转换为其他类型?我觉得是一样的?但是我不确定当它们被放入文件中时是否会发生一些有趣的事情…会将int写入一个1字节的值。有符号与无符号只是位模式如何解释的问题,而不是位模式本身 因此,只要整数在0到255的范围内,就可以将它们塞入字节并将字节写入文件 然而,因为Java将字节位模式解释为有符号的,所以在读回它们时必须小心 例如,假设您有整数253。这是(完

在java中,如何将整数写入文件,使其成为无符号8位整数(范围为0到255)?数字类型为int且在0-255范围内就足够了吗,还是需要先将它们转换为其他类型?我觉得是一样的?但是我不确定当它们被放入文件中时是否会发生一些有趣的事情…

会将
int
写入一个1字节的值。

有符号与无符号只是位模式如何解释的问题,而不是位模式本身

因此,只要整数在
0
255
的范围内,就可以将它们塞入字节并将字节写入文件

然而,因为Java将字节位模式解释为有符号的,所以在读回它们时必须小心

例如,假设您有整数
253
。这是(完整的32位格式):

如果您这样做:

int i = 253;
byte b = (byte) i;
然后
b
将包含以下位:

11111101
如果您要求Java使用它,Java将声明它是
-3
,因为在将位解释为有符号时,
-3
表示为模式
111111 01
。因此,如果您将该字节写入一个文件,那么位
111111 01
将根据需要被写入

同样,当您在读取文件时将其读回一个字节时,您读入的字节将填充位模式
111111 01
,Java将再次解释为
-3
。所以你不能只做:

byte b = readByteFromFile();
int i = b;
因为Java将
b
的内容解释为
-3
,并将表示
-3
的整数表示为32位整数,即:

11111111111111111111111111111101
相反,您需要屏蔽这些内容,以确保最终得到的整数为:

00000000000000000000000011111101
所以


这是否也意味着:短s=(0x00FF)&b@布赖恩
inti=((int)b)和0xff
00000000000000000000000011111101
byte b = readByteFromFile();
int i = (0x000000FF) & b;