我刚发现readUnsignedInt
类中没有RandomAccessFile
()方法。为什么?是否有任何解决方法可以从文件中读取unsigned int?
修改
我想从文件中读取unsigned int并将其放入长空间。
EDIT2:
无法使用readLong()。它将读取8个字节而不是4个字节。文件中的数据在4个字节范围内具有无符号整数。
EDIT3:
在这里找到答案:http://www.petefreitag.com/item/183.cfm
Edit4:
如果数据文件是little-endian怎么样?我们需要先换位?
答案 0 :(得分:19)
我会这样做:
long l = file.readInt() & 0xFFFFFFFFL;
位操作是必要的,因为向上转换将延伸一个负号。
关于字节序。据我所知,Java中的所有I / O都是以大端方式完成的。当然,通常无关紧要(字节数组,UTF-8编码等不受字节顺序影响),但DataInput
的方法很多。如果您的号码以小端存储,则必须自行转换。我知道的标准Java中唯一的工具允许通过ByteBuffer
方法配置字节顺序为order()
,但是你打开NIO的门,我没有很多经验。< / p>
答案 1 :(得分:3)
已修改删除readLong()
:
您可以使用readFully(byte[] b, int off, int len)
然后使用以下方法转换为Long
:How to convert a byte array to its numeric value (Java)?
答案 2 :(得分:2)
因为java中没有unsigned int类型?
为什么不readLong()
?
你可以读取Long然后取32位。
修改强> 你可以尝试
long value = Long.parseLong(Integer.toHexString(file.readInt()), 16);
答案 3 :(得分:0)
根据您使用int
所做的操作,您可能不需要将其变为长时间。您只需要知道您正在执行的操作。在它只有32位后,您可以根据需要将其视为有符号或无符号。
如果你想玩ByteOrder,最简单的方法就是使用ByteBuffer,它允许你设置一个字节顺序。如果您的文件小于2 GB,则可以将整个文件映射到内存中并随机访问ByteBuffer。