用Java修改二进制文件的内容

时间:2015-01-29 02:25:42

标签: java java-io

我正在编写一个Java程序,我打算通过修改游戏的二进制数据来修改某个视频游戏。它存储在一个简单包含游戏数据字节的.dat文件中。我一直在使用FileInputStream来读取文件,FileOutputStream来修改内容。但是,据我所知FileOutputStream只能修改文件的结尾,而不是中间的内容。

我希望能够做到以下几点:

如果这是提供的二进制文件:

06 B4 45 18 A7 DD

我希望能够修改位置n = 3处的字节并将其更改为值v = FF。

导致:

06 B4 45 FF A7 DD

我想把这些数据写回文件。

解决这个问题的最佳方法是什么?现在,我能看到FileOutputStream工作的唯一方法是,如果我实际上采用原始文件,并从头到尾重新构建它,但在流程中交换新值。但是,考虑到我计划修改的文件每个大约包含20,000个字节,这似乎效率很低。

我觉得必须有一种更简单的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要RandomAccessFile。这就足够了,但为了提高性能,您可以使用getChannel()ByteBuffer

正如名称所示,RandomAccessFile允许在任何地方定位,以及读写。

try (RandomAccessFile fh = new RandomAccessFile(file, "rw")) {
    fh.seek(3L);
    int old = fh.read(); // 0x18
    fh.seek(3L);
    fh.write(0xBB);
}