Mapped IO : Input Output Stream « File Input Output « Java






Mapped IO

Mapped IO

// : c12:MappedIO.java
// {Clean: temp.tmp}
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.IntBuffer;
import java.nio.channels.FileChannel;

public class MappedIO {
  private static int numOfInts = 4000000;

  private static int numOfUbuffInts = 200000;

  private abstract static class Tester {
    private String name;

    public Tester(String name) {
      this.name = name;
    }

    public long runTest() {
      System.out.print(name + ": ");
      try {
        long startTime = System.currentTimeMillis();
        test();
        long endTime = System.currentTimeMillis();
        return (endTime - startTime);
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }

    public abstract void test() throws IOException;
  }

  private static Tester[] tests = { new Tester("Stream Write") {
    public void test() throws IOException {
      DataOutputStream dos = new DataOutputStream(
          new BufferedOutputStream(new FileOutputStream(new File(
              "temp.tmp"))));
      for (int i = 0; i < numOfInts; i++)
        dos.writeInt(i);
      dos.close();
    }
  }, new Tester("Mapped Write") {
    public void test() throws IOException {
      FileChannel fc = new RandomAccessFile("temp.tmp", "rw")
          .getChannel();
      IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
          .asIntBuffer();
      for (int i = 0; i < numOfInts; i++)
        ib.put(i);
      fc.close();
    }
  }, new Tester("Stream Read") {
    public void test() throws IOException {
      DataInputStream dis = new DataInputStream(new BufferedInputStream(
          new FileInputStream("temp.tmp")));
      for (int i = 0; i < numOfInts; i++)
        dis.readInt();
      dis.close();
    }
  }, new Tester("Mapped Read") {
    public void test() throws IOException {
      FileChannel fc = new FileInputStream(new File("temp.tmp"))
          .getChannel();
      IntBuffer ib = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size())
          .asIntBuffer();
      while (ib.hasRemaining())
        ib.get();
      fc.close();
    }
  }, new Tester("Stream Read/Write") {
    public void test() throws IOException {
      RandomAccessFile raf = new RandomAccessFile(new File("temp.tmp"),
          "rw");
      raf.writeInt(1);
      for (int i = 0; i < numOfUbuffInts; i++) {
        raf.seek(raf.length() - 4);
        raf.writeInt(raf.readInt());
      }
      raf.close();
    }
  }, new Tester("Mapped Read/Write") {
    public void test() throws IOException {
      FileChannel fc = new RandomAccessFile(new File("temp.tmp"), "rw")
          .getChannel();
      IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
          .asIntBuffer();
      ib.put(0);
      for (int i = 1; i < numOfUbuffInts; i++)
        ib.put(ib.get(i - 1));
      fc.close();
    }
  } };

  public static void main(String[] args) {
    for (int i = 0; i < tests.length; i++)
      System.out.println(tests[i].runTest());
  }
} ///:~


           
       








Related examples in the same category

1.Buffer EqualityBuffer Equality
2.Input and output with human-readable text filesInput and output with human-readable text files
3.Input and output of primitive values with binary filesInput and output of primitive values with binary files
4.Input and output of arrays and objects with binary filesInput and output of arrays and objects with binary files
5.Input and output of primitive values with random access binary filesInput and output of primitive values with random access binary files
6.Input and output using strings and string buffersInput and output using strings and string buffers
7.Timing Unbuffered Reads
8.Reading Bytes from a DataInputStreamReading Bytes from a DataInputStream
9.Comparing Buffered and Unbuffered Writing Performance
10.Read a file and print, using LineReader and System.out
11.Demonstrate ProgressMeterInputStream
12.Converting text to and from ByteBuffersConverting text to and from ByteBuffers
13.Demonstrates standard I/O redirection
14.Creating a very large file using mappingCreating a very large file using mapping
15.Demonstrates the use of the File class to create directories and manipulate files
16.Mapping an entire file into memory for reading
17.What happens when the entire file isn't in your mapping region
18.Object serializationObject serialization
19.Locking portions of a mapped fileLocking portions of a mapped file
20.File read and writeFile read and write