尚硅谷Netty系列学习笔记六《MappedByteBuffer的使用》

前言:1.由于工作需要,需要学习下Netty框架,随对学习进行整理。方便后期的翻阅。大家也可以借鉴下。

           2.学习基于尚硅谷的Netty视频教程,笔记也会查阅其他资料来完善观看视频中本人理解模糊的地方。


MappedByteBuffer是什么?有啥用?

也是缓冲区的一种,可以让文件直接在内存(堆外的内存)中进行修改,操作系统不需要拷贝一次,性能高!

注意:

MappedByteBuffer在使用时,因为不需要拷贝,所以 需要通道所在的具备读写双向功能,以往创建的FileInputStream或者FileOutputStream等等流都是单向的,不能满足要求,
所以使用 RandomAccessFile 流 来创建文件通道FileChannel

RandomAccessFile是什么?有啥用?

 RandomAccessFile是一种 用于I/O操作的 类,但不同于 io包下的 输入输出流类, 它是一个直接继承Object的,独立的类。
 我们平常创建流对象关联文件,开始读文件或者写文件都是从头开始的,不能从中间开始,
 如果是开多线程下载一个文件我们之前学过的FileWriter或者FileReader等等都无法完成,
 而当前介绍的RandomAccessFile他就可以解决这个问题,因为它可以指定位置读,指定位置写的一个类,通常开发过程中,多用于多线程下载一个大文件.
 并且,randomAccessFile支持 读写模式,就不用像以前一样创建一个输入流和一个输出流了!

代码示例如下:

    public static void main(String[] args) throws Exception {
        /* 使用 RandomAccessFile 初始化时 指定 读+写 模式 'rw' 也可以单独指定 读 或者 写。很灵活,
            这样创建的FileChannel通道才可以 通过 map方法,获取 可读写 MappedByteBuffer!
         */
        RandomAccessFile randomAccessFile = new RandomAccessFile("E:\\test\\1.txt","rw");
        FileChannel channel = randomAccessFile.getChannel();
        /*
         * MappedByteBuffer 可以让文件直接在内存(堆外的内存)中进行修改,操作系统不需要拷贝一次,性能高,
         *
         * 参数1: FileChannel.MapMode.READ_WRITE 读写模式
         * 参数2:起始位置
         * 参数3:映射到内存的大小(不是索引位置),5表示5个字节
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, 5);
        //修改文件中第一个字节 改为 H
        mappedByteBuffer.put(0,(byte)'H');
        //关闭流
        randomAccessFile.close();
        //至于修改后如何同步回文件则由NIO来完成,

    }

下一节:尚硅谷Netty系列学习笔记七《NIO核心组件之Selector》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值