高效的文件拷贝之MappedByteBuffer

简介: 高效的文件拷贝之MappedByteBuffer

我们经常对文件进行操作,但是效率却一般。最近在研究MappedByteBuffer的用法,下面是例子:

void MappedByteBufferTest() {
    try {
        RandomAccessFile source = new RandomAccessFile("F:\\cmb-flume\\flume\\logs\\relog\\paas0.log", "r");
        RandomAccessFile target = new RandomAccessFile("F:\\cmb-flume\\flume\\logs\\relog\\1.log", "rw");
        FileChannel in = source.getChannel();
        FileChannel out = target.getChannel();
        long size = in.size();
        MappedByteBuffer mbbi = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
        MappedByteBuffer mbbo = out.map(FileChannel.MapMode.READ_WRITE, 0, size);
        long start = System.currentTimeMillis();
        for (int i = 0; i < size; i++) {
            byte b = mbbi.get(i);
            mbbo.put(i, b);
        }
        source.close();
        target.close();
        System.out.println("Spend: " + (System.currentTimeMillis() - start) + "ms");
    } catch (Exception e) {
        // TODO: handle exception
    }
}

打印:Spend: 170ms

paas0.log的大小是197M,耗时170毫秒,换算一下1毫秒可以读取1.15M。1秒钟的话可以读取1.13G大小的文件。

相关文章
|
监控 Java API
死磕xxl-job(一)
死磕xxl-job(一)
|
中间件 Nacos 数据安全/隐私保护
Nacos下载与安装配置(2.3.0版本示例)
本文介绍微服务中间件 nacos的下载与安装以及配置
Nacos下载与安装配置(2.3.0版本示例)
|
网络协议 程序员
为什么TCP需要三次握手?一文讲透!
TCP三次握手是TCP协议建立连接的关键步骤,确保客户端和服务端同步状态并确认彼此的存在。过程分为三步:1) 客户端发送SYN包请求连接;2) 服务端回应SYN/ACK包确认收到并提供初始序列号;3) 客户端发送ACK包确认服务端的序列号,双方进入连接状态。此机制确保了双向通信的可靠性和资源的有效利用,避免了失效请求导致的问题。
|
消息中间件 存储 监控
RocketMQ的性能优势?
【8月更文挑战第29天】RocketMQ的性能优势?
482 2
|
XML 测试技术 uml
liteflow学习一
liteflow学习一
1190 0
|
网络协议
说说TCP为什么需要三次握手和四次挥手? _
TCP连接的建立需要三次握手,确保双方的接收和发送能力正常,而关闭连接则涉及四次挥手以确保数据传输完成。这个过程包括客户端发送SYN开始连接,服务器响应SYN并ACK,然后客户端再次ACK确认连接建立。终止连接时,客户端发送FIN,服务器回ACK,服务器发送FIN,最后客户端再发送ACK确认关闭。四次挥手的目的是防止已失效的连接请求报文突然传到服务器,导致不必要的资源消耗。
342 0
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
|
SQL 存储 NoSQL
基于 Flink 构建大规模实时风控系统在阿里巴巴的落地
阿里云实时计算产品经理李佳林(风元)在 Flink 峰会的演讲。
基于 Flink 构建大规模实时风控系统在阿里巴巴的落地
|
消息中间件 存储 缓存
深度解读 RocketMQ 存储机制
本文想从一个不一样的视角,着重于谈谈我眼中的这种存储实现是在解决哪些复杂的问题,因此我从本文最初的版本中删去了冗杂的代码细节分析,由浅入深的分析存储机制的缺陷与优化方向。
954 1
深度解读 RocketMQ  存储机制
|
网络协议 C++ Docker
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
64935 2