写入文件的最快方法?

2022-09-01 05:18:39

我做了一个方法,需要a和a。它将该文件替换为具有该字符串作为其内容的新文件。FileString

这是我做的:

public static void Save(File file, String textToSave) {

    file.delete();
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter(file));
        out.write(textToSave);
        out.close();
    } catch (IOException e) {
    }
}

然而,它非常缓慢。它有时需要一分多钟。

我如何编写包含数万甚至多达一百万个字符的大文件?


答案 1

确保分配足够大的缓冲区:

BufferedWriter out = new BufferedWriter(new FileWriter(file), 32768);

您正在运行哪种操作系统?这也可以产生很大的不同。但是,花一分钟写出一个大小不大的文件听起来像是一个系统问题。在 Linux 或其他 *ix 系统上,您可以使用类似的东西来查看 JVM 是否正在进行大量不必要的系统调用。(很久以前,Java I/O还很笨,如果你不小心,就会进行疯狂的低级系统调用,但是当我说“很久以前”时,我的意思是1998年左右。stracewrite()

edit — 请注意,Java 程序以简单的方式编写简单文件的情况,但速度非常慢,这本质上是一个奇怪的情况。您能判断写入文件时 CPU 是否负载过重吗?它不应该是;这样的事情应该几乎没有CPU负载。


答案 2

适合您的简单测试

char[] chars = new char[100*1024*1024];
Arrays.fill(chars, 'A');
String text = new String(chars);
long start = System.nanoTime();
BufferedWriter bw = new BufferedWriter(new FileWriter("/tmp/a.txt"));
bw.write(text);
bw.close();
long time = System.nanoTime() - start;
System.out.println("Wrote " + chars.length*1000L/time+" MB/s.");

指纹

Wrote 135 MB/s.