内存映射文件

内存映射文件允许我们创建和修改那些因为太大而不能放入内存的文件。有了内存映射文件,我们就可以假定整个文件都放在内存中,而且可以完全把它当作非常大的数组来访问。

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)也可以很容易修改。注意底层操作系统文件映射工具是用来最大化的提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值