Java - 在给定偏移量处读取字节

3
我在理解如何读取并返回文件中某个偏移位置的值方面遇到了一些困难。
例如,我知道从我的十六进制编辑器中偏移量为D768,值为32位。那么如何读取此值并显示在标签中呢?
非常感谢您提供任何帮助。
4个回答

6
我认为java.io.RandomAccessFile是你的新朋友 :-)
注意以下代码,它尚未经过测试。
RandomAccessFile raf = new RandomAccessFile("foo.bin", "r");
raf.seek(0xd768);
int value = raf.read();

1
我会使用readInt()(读取32位整数)而不是read()(读取无符号字节)。 - Peter Lawrey
谢谢,伙计们,这非常有帮助。我想我可以自己继续了。再次感谢。 - Bagshot

1
使用skipBytes跳转到给定位置。如果要读取32位数字且值为大端序,可以使用DataInputStream。如果是小端序,则需要手动将四个字节转换为int
int value = (int)bytes[0]
        | ((int)bytes[1] << 8)
        | ((int)bytes[2] << 16)
        | ((int)bytes[3] << 24);

1
使用DataInputStream类。打开文件并使用skipBytes(offset)定位,然后调用readInt()。这将给你一个32位的起始偏移量。请注意,这假设整数在文件中以最高有效字节优先的方式表示。

这并不总是有效的。Skip 不总是跳过偏移量字节数。 (这就是为什么它返回实际跳过的字节数)。 - MTilsted
@MTilsted - 然后您可以跳过,直到达到所需的字节数。实际上,我认为您会发现,如果偏移量超出文件末尾,则skipBytes仅在文件上“无法工作”。 - Stephen C

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接