title: Why is writing data to disk as fast as keeping it in-memory?
body: <p>I have the following 10000000x2 matrix:</p>
  
  <pre><code>0        0
  1        1
  2        2
  ..       ..
  10000000 10000000
  </code></pre>
  
  <p>Now I want to save this matrix to <code>int[][]</code> array:</p>
  
  <pre><code>import com.google.common.base.Stopwatch;
  
  static void memory(int size) throws Exception {
      System.out.println("Memory");
  
      Stopwatch s = Stopwatch.createStarted();
  
      int[][] l = new int[size][2];
      for (int i = 0; i &lt; size; i++) {
          l[i][0] = i;
          l[i][1] = i;
      }
  
      System.out.println("Keeping " + size + " rows in-memory: " + s.stop());
  }
  
  public static void main(String[] args) throws Exception {
      int size = 10000000;
      memory(size);
      memory(size);
      memory(size);
      memory(size);
      memory(size);
  }
  </code></pre>
  
  <p>The output:</p>
  
  <pre><code>Keeping 10000000 rows in-memory: 2,945 s
  Keeping 10000000 rows in-memory: 408,1 ms
  Keeping 10000000 rows in-memory: 761,5 ms
  Keeping 10000000 rows in-memory: 543,7 ms
  Keeping 10000000 rows in-memory: 408,2 ms
  </code></pre>
  
  <p>Now I want to save this matrix to disk:</p>
  
  <pre><code>import com.google.common.base.Stopwatch;
  import java.io.BufferedOutputStream;
  import java.io.FileOutputStream;
  
  static void file(int size, int fileIndex) throws Exception {
      Stopwatch s = Stopwatch.createStarted();
  
      FileOutputStream outputStream = new FileOutputStream("D:\\file" + fileIndex);
      BufferedOutputStream buf = new BufferedOutputStream(outputStream);
      for (int i = 0; i &lt; size; i++) {
          buf.write(bytes(i));
          buf.write(bytes(i));
      }
  
      buf.close();
      outputStream.close();
  
      System.out.println("Writing " + size + " rows: " + s.stop());
  }
  
  public static void main(String[] args) throws Exception {
      int size = 10000000;
      file(size, 1);
      file(size, 2);
      file(size, 3);
      file(size, 4);
      file(size, 5);
  }
  </code></pre>
  
  <p>The output:</p>
  
  <pre><code>Writing 10000000 rows: 715,8 ms
  Writing 10000000 rows: 636,6 ms
  Writing 10000000 rows: 614,6 ms
  Writing 10000000 rows: 598,0 ms
  Writing 10000000 rows: 611,9 ms
  </code></pre>
  
  <p>Shouldn't be saving to memory much faster?</p>