【问题标题】:Editing a 1MB file continuously, what's more efficient?连续编辑一个1MB的文件,什么效率更高?
【发布时间】:2011-02-19 22:48:06
【问题描述】:

我必须不断地编辑一个 1MB 的文件,模拟一个文件系统。我要修改文件控制块、FAT、块等目录。

教授建议每次进行更新时都覆盖该文件。 1MB 不应该花几分钟来完成,但我不喜欢这种方式。

去这里的方式是 FileChannel 吗?另外,我知道如果我编辑MappedByteBuffer,映射文件区域的内容也会立即编辑?即自反映射?

谢谢。

【问题讨论】:

    标签: java java-io


    【解决方案1】:

    你需要RandomAccessFile

    【讨论】:

    • 我看到的 RandomAccessFile 问题是覆盖数据的唯一方法是: 1. 在位置 P 写入 X 个字节(添加到我要覆盖的数据之前) 2. 写入所有其余部分从 P+X 开始的文件 3. 截断文件 是不是很丑?
    • 您可以搜索到任何位置,然后写入该位置。剩下的就看你了。您需要了解文件系统如何驻留在磁盘上,在文件中使用具有寻道偏移的内存对象,以便在进行写入时使用。您还可以使用 getChannel() 方法获取文件通道。
    • 看来MappedByteBuffer也不错,还可以找。好像没有太大区别。您还可以将 MappedByteBuffer 与需要 ByteBuffer 的东西一起使用。我认为这些方法中的任何一种都不应该在写入时重写整个文件。效率太低了。
    • @kmels 我不明白你覆盖数据的问题。通常的方法是: 1. 寻找你想要开始覆盖的位置 2. 覆盖。您不能在结尾之前插入到 RandomAccessFile 或 remove 内容,只能在末尾覆盖数据、追加截断文件。
    • 你说得对,Christian,我刚刚检查过,虽然 FileChannel.map 也很好地解决了这个问题。感谢您的回答。
    猜你喜欢
    • 2019-06-12
    • 2021-10-24
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多