gpt4 book ai didi

java - 为什么 java RandomAccessFile 比 FileOutputStream 慢这么多?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:20 25 4
gpt4 key购买 nike

只要我能理解 java api,使用“rw”打开 RandomAccessFile 就不会在底层存储设备上同步写入每个单字节。与“rws”或“rwd”不同。
为什么它与带有“rw”的无缓冲 FileOutputStream 的“速度”几乎相同,而带有“rws”/“rwd”的速度却慢了 10 倍以上?

下面的简单代码说明了这一点,对此我无法得到任何合理的解释。有什么线索吗?

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;

public class StreamTest {

public static void main(String[] args) throws Exception {

OutputStream os;
RandomAccessFile raf;
int size = 10000;
File file = new File("test.log");

long a=System.currentTimeMillis();
os = new FileOutputStream(file);
for(int i=0;i<size;i++){
os.write(("1").getBytes());
}
os.close();
long b=System.currentTimeMillis();
System.out.println("writing direct "+(b-a));

raf = new RandomAccessFile(file,"rws");
for(int i=0;i<size;i++){
raf.write(("1").getBytes());
}
raf.close();

long c=System.currentTimeMillis();
System.out.println("random access write "+(c-b));

raf = new RandomAccessFile(file,"rw");
for(int i=0;i<size;i++){
raf.write(("1").getBytes());
}
raf.close();

long d=System.currentTimeMillis();
System.out.println("random access optimized write "+(d-c));
}
}

最佳答案

来自docs , rws 模式表示:

Open for reading and writing, as with "rw", and also require that every update to the file's content or metadata be written synchronously to the underlying storage device.

按理说,强制将文件内容写入底层设备会比其他方法慢得多,这可能允许 VM/OS 缓存写入。

关于java - 为什么 java RandomAccessFile 比 FileOutputStream 慢这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6350269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com