小编spa*_*ete的帖子

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

只要我能理解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());
    } …
Run Code Online (Sandbox Code Playgroud)

java

7
推荐指数
2
解决办法
8899
查看次数

标签 统计

java ×1