影射方式的文件讀寫

 

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());
   }

 }
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章