import java.io.*;import java.nio.*;import java.nio.channels.*;public class MappedIO ...{ private static int numOfInts = 4000000; private static int numOfUnbufferInts = 2000000; private abstract static class Tester ...{ private String name; private Tester(String name) ...{ this.name = name; } public long runTime() ...{ System.out.print(name + ":"); try ...{ long beginTime,endTime; beginTime = System.currentTimeMillis(); test(); endTime = System.currentTimeMillis(); return endTime-beginTime; }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 RandomAccessFile("temp.tmp","rw").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("temp.tmp","rw"); raf.writeInt(1); for (int i=0;i<numOfUnbufferInts;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("temp.tmp","rw").getChannel(); IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE,0,fc.size()).asIntBuffer(); ib.put(0); for (int i=1;i<numOfUnbufferInts;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].runTime()); } }