连续编辑1MB文件,更高效的方法是什么?

3

我需要持续编辑一个1MB的文件,模拟一个文件系统。我需要修改文件控制块、FAT、块等目录。

教授建议每次更新时覆盖文件。1MB的文件不应该需要花费几分钟的时间,但我不喜欢这种方式。

在这里,是使用FileChannel的方法吗?此外,如果我编辑MappedByteBuffer,映射文件区域的内容是否也立即被编辑了?即它是否是反射映射的?

谢谢。

1个回答

2

我认为RandomAccessFile存在的问题是,唯一覆盖数据的方法是:
  1. 在位置P写入X个字节(作为要覆盖的数据的前缀)
  2. 从P+X开始写入文件的其余部分
  3. 截断文件
这不是很丑陋吗?
- Carlos López-Camey
你可以寻找任何位置,然后写入该位置。其余的就取决于你了。你需要了解文件系统在磁盘上的存储方式,使用内存对象并在文件中使用寻址偏移量以进行写入。你也可以使用getChannel()方法获取文件通道。 - Chris Dennett
看起来MappedByteBuffer也很不错,而且还允许您寻找。似乎没有太大的区别。您还可以将MappedByteBuffer与期望ByteBuffer的内容一起使用。我认为这两种方法在进行写操作时都不应该重写整个文件。这样效率太低了。 - Chris Dennett
1
@kmels,我不明白你对覆盖数据的问题。通常的方法是:1.定位到要开始覆盖的位置2.覆盖。您无法在RandomAccessFile中“插入”或在结尾之前“删除”内容,只能“覆盖”数据,“追加”到末尾或“截断”文件。 - Christian Semrau
你是对的,Christian。我刚刚检查了一下,虽然FileChannel.map也很好地解决了这个问题。感谢你的回答。 - Carlos López-Camey

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