Java 如何从文件中读取无符号值

Java 如何从文件中读取无符号值,java,unsigned,Java,Unsigned,我试图读取二进制数据(doomwad文件),其中包含大量无符号的短字节和无符号字节值 此时,我将文件读入一个字节[],用一个小的尾数顺序包装一个ByteBuffer,然后分别通过bbuf.getShort()等访问值 转换这些e。G到二维坐标不是问题,因为最终它们的范围(例如从-128到128或从0到256)无关紧要,但更常见的情况是,短值用作数组索引,短/字节值用作标志/,因此我需要一种快速的方法将其视为有符号类型。 我知道,Java没有无符号类型“为了简单…”。 您能提出一些建议吗?如果其他

我试图读取二进制数据(doomwad文件),其中包含大量无符号的短字节和无符号字节值

此时,我将文件读入一个字节[],用一个小的尾数顺序包装一个ByteBuffer,然后分别通过bbuf.getShort()等访问值

转换这些e。G到二维坐标不是问题,因为最终它们的范围(例如从-128到128或从0到256)无关紧要,但更常见的情况是,短值用作数组索引,短/字节值用作标志/,因此我需要一种快速的方法将其视为有符号类型。 我知道,Java没有无符号类型“为了简单…”。
您能提出一些建议吗?

如果其他方法都失败了,您可以始终将它们作为INT存储在内部,并确保在读/写时进行正确的转换

(读取为byte/short,转换为int,如果为负数,则添加2^位。写入时只需截断为8/16位。)


我承认,这不是最优雅的解决方案。

为了保存未签名的
int
s,您需要一个
long
。然后需要截断最后32位。您可以使用以下技巧来完成此操作

final long UNSIGNED_INT_BITS = 0xffffffffL;
int a = -3;
long b = UNSIGNED_INT_BITS & a;
System.out.println(a);
System.out.println(b);
System.out.println(Long.toHexString(UNSIGNED_INT_BITS));
输出:

-3
4294967293
ffffffff

如果需要将0xFF字节解释为256,请执行以下操作

int n = b & 0xFF;