只要我能理解java api,使用"rw"打开RandomAccessFile就不会在底层存储设备上同步地写入每个字节,这与"rws"或"rwd"不同。
为什么"rw"几乎与未缓冲的FileOutputStream相同,而"rws"/"rwd"则比其慢10倍以上呢?下面的简单代码示例展示了这一点,但我无法得到任何合理的解释。有什么线索吗?
为什么"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));
}
}