我正在寻找一种有效的方法来创建一个大小未知但可以从mb到gb的文件,并随机填充其内容。我可以写入前200个字节而不是跳到结尾并写入最后200个字节并移到中间并写入那里。 RandomAccessFile 是否有效这样做,还是有更适合这种工作的替代方案?

有帮助吗?

解决方案

是的,使用 RandomAccessFile - 这就是它的用途。你可能可能使用 FileChannel ,但我先去 RandomAccessFile - 它可能更简单。

请注意,您将无法“插入中间”。写完结束部分之后的文件:我不知道任何支持它的文件系统。在编写最后一节之前,你需要知道完整的大小,基本上。另一种方法是按顺序写入,记住最后一位直到结束。

如果您可以向我们提供有关您需要做什么的更多信息(以及何时获得有关尺寸的信息),我们可以为您提供更多帮助。

编辑:要创建具有特定大小的文件,您可以搜索(),然后写入数据:

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}

退出后, file.dat 的长度为101个字节。 (注意,通常你会使用try / finally等。)

编辑:正如评论中提到的coobird, setLength()也会扩展文件 - 但如果你给出的长度小于当前大小,它也会截断文件。鉴于您对基本上编写种子数据的评论,我怀疑寻找和写作正是您想要的行为。当你收到一个块时,只需找到正确的位置,写出来,文件将在需要时自行扩展。

其他提示

RandomAccessFile应该这样做

我猜RandomAccessFile适合这个问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top