我做了一个拿a File和a的方法String.它将文件替换为带有该字符串作为其内容的新文件.
这就是我所做的:
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是它很慢.它有时需要一分钟.
如何编写成千上万的大文件,其中可能有多达一百万个字符?
Poi*_*nty 20
确保分配足够大的缓冲区:
BufferedWriter out = new BufferedWriter(new FileWriter(file), 32768);
Run Code Online (Sandbox Code Playgroud)
你在运行什么样的操作系统?这也可以产生很大的不同.然而,花一分钟写出一个不太大的文件听起来像是一个系统问题.在Linux或其他*ix系统上,您可以使用类似的东西strace来查看JVM是否进行了大量不必要的系统调用.(很久很久以前,Java I/O非常愚蠢,write()如果你不小心,会发出疯狂的低级别系统调用,但是当我说"很久以前"时,我的意思是1998年左右.)
编辑 - 请注意,Java程序以简单的方式编写一个简单文件,但速度非常慢的情况本质上是奇怪的.在写入文件时,能否判断CPU是否负载过重?不应该; 从这样的事情应该几乎没有CPU负载.
Pet*_*rey 17
一个简单的测试
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.");
Run Code Online (Sandbox Code Playgroud)
打印
Wrote 135 MB/s.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83168 次 |
| 最近记录: |