为什么在RandomAccessFile类中没有readUnsignedInt?

问题描述

| 我只是发现
RandomAccessFile
类中没有
readUnsignedInt
()方法。为什么?有什么解决方法可以从文件中读取未签名的int? 编辑: 我想从文件中读取一个无符号的int并将其放入较长的空间。 编辑2: 无法使用readLong()。它将读取8个字节而不是4个字节。文件中的数据具有4字节范围内的无符号整数。 编辑3: 在这里找到答案:http://www.petefreitag.com/item/183.cfm 编辑4: 如果数据文件是小端的怎么办?我们需要先交换位吗?     

解决方法

我会这样做:
long l = file.readInt() & 0xFFFFFFFFL;
位操作是必需的,因为上行将扩展负号。 关于字节序。据我所知,Java中的所有I / O都是以大端方式进行的。当然,通常并不重要(字节数组,UTF-8编码等不受字节顺序的影响),但是许多
DataInput
方法都可以。如果您的数字以小尾数法存储,则必须自己进行转换。我知道的标准Java中唯一允许配置字节序的工具是通过
order()
方法实现的
ByteBuffer
,但是您打开了NIO的大门,而我对此没有太多的经验。     ,编辑删除remove6ѭ: 您可以使用
readFully(byte[] b,int off,int len)
,然后使用以下方法转换为
Long
:如何将字节数组转换为其数值(Java)?     ,因为在Java中没有unsigned int类型? 为什么不
readLong()
? 您可以读长,然后取前32位。 编辑 你可以试试
long value = Long.parseLong(Integer.toHexString(file.readInt()),16);
    ,根据您对
int
所做的操作,可能不需要将其变长。您只需要知道所执行的操作即可。毕竟它只有32位,您可以根据需要将其视为有符号的或无符号的。 如果要使用ByteOrder,最简单的操作可能是使用ByteBuffer,它允许您设置字节顺序。如果您的文件小于2 GB,则可以将整个文件映射到内存中并随机访问ByteBuffer。