内存映射文件允许我们创建和修改那些因为太大而不能放入内存的文件。有了内存映射文件,我们就可以假定整个文件都放在内存中,而且可以完全把它当作非常大的数组来访问。
public class LargeMappedFiles { static int length=0x8FFFFFF;//128兆 public static void main(String[] args) throws Exception { MappedByteBuffer out=new RandomAccessFile("test.dat","rw").getChannel() .map(FileChannel.MapMode.READ_WRITE,0,length); for(int i=0;i<length;i++){ out.put((byte)'x'); } System.out.println("Finishing writing"); for(int i=length/2;i<length/2+6;i++){ System.out.println((char) out.get(i)); } } }为了既能写又能读,我们先从RandomAccessFile开始,获得该文件上的通道,然后调用map()产生MappedByteBuffer,这是一种特殊类型的直接缓冲器。注意我们必须制定映射文件的初始位置和映射区域的长度,这以为着我们可以映射某个文件的较小的部分。MappedByteBuffer由ByteBuffer继承而来 因此它具有ByteBuffer的所有方法。前面那个程序创建的文件为128兆,这可能比操作系统允许一次载入内存的空间大,但似乎我们可以一次访问到整个文件,因为只有一部分文件放入了内存,文件的其他部分被交换了出去。用这种方式很大的文件(可大2GB)也可以很容易修改。注意底层操作系统文件映射工具是用来最大化的提高性能。