File Input Output Java

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
// Buffering may speed up writes to a FileOutputStream, but not for 
// a FileWriter, because a FileWriter is
// an OutputStreamWriter, which already uses the buffering.
public class OutputStreamDemo {
  public static void main(String[] args) throws IOException {
    OutputStream os1 = new FileOutputStream("tmp1.dat");
    writeints("Unbuffered: ", 1000000, os1);
    OutputStream os2 = new BufferedOutputStream(new FileOutputStream(
        "tmp2.dat"));
    writeints("Buffered:   ", 1000000, os2);
    Writer wr1 = new FileWriter("tmp1.dat");
    writeints("Unbuffered: ", 1000000, wr1);
    Writer wr2 = new BufferedWriter(new FileWriter("tmp2.dat"));
    writeints("Buffered:   ", 1000000, wr2);
  }
  static void writeints(String msg, int count, OutputStream os)
      throws IOException {
    long currentTime = System.currentTimeMillis() ;
    for (int i = 0; i < count; i++)
      os.write(i & 255);
    os.close();
    System.out.println(msg + Long.toString(System.currentTimeMillis()-currentTime));
  }
  static void writeints(String msg, int count, Writer os) throws IOException {
    long currentTime = System.currentTimeMillis() ;
    for (int i = 0; i < count; i++)
      os.write(i & 255);
    os.close();
    System.out.println(msg + Long.toString(System.currentTimeMillis()-currentTime));
  }
}