高效的文件拷贝之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大小的文件。

相关文章
|
6月前
IO流拷贝文件的几种方式
IO流拷贝文件的几种方式
49 1
|
6月前
|
存储 缓存
MappedByteBuffer 写文件
MappedByteBuffer 写文件
53 0
|
9月前
|
存储 C++ iOS开发
C++文件操作(文本文件的读写+二进制文件的读写)
C++文件操作(文本文件的读写+二进制文件的读写)
|
9月前
|
Java
Java【代码 15】文件操作相关方法(获取文件、复制文件、创建文件夹、获取图片文件、写出数据到文件、清理文件夹)
Java【代码 15】文件操作相关方法(获取文件、复制文件、创建文件夹、获取图片文件、写出数据到文件、清理文件夹)
51 0
C++IO流文件读写(文本文件,二进制文件)
C++IO流文件读写(文本文件,二进制文件)
89 0
|
Java
【Java】文件的拷贝(直接拷贝,借助缓冲区拷贝)完整代码实现
【Java】文件的拷贝(直接拷贝,借助缓冲区拷贝)完整代码实现
127 0
|
Java
Java使用FileChannel进行文件拷贝(提升拷贝效率)
FileChannel属于nio,FileChannel底层会利用操作系统的零拷贝进行优化,效率较io高。
434 0
教你IO流来便利电脑磁盘所有文件,把图片放到一个文件夹里
教你IO流来便利电脑磁盘所有文件,把图片放到一个文件夹里
133 1
教你IO流来便利电脑磁盘所有文件,把图片放到一个文件夹里
|
Java 开发者
Java操作文件的日常总结(文件压缩,文件解压,递归删除文件,文件的下载保存)
文件的读写是日常开发中经常碰到的需求,熟练掌握文件的读写是每个Java开发者的基本功。本文将主要介绍常见的文件读写操作。 之前写过一篇Java IO的文章 Java IO基础(同步阻塞IO)。
303 0
|
Linux
(二)目录及文件操作
命令:ls[选项][目录/文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。 对于文件,将列出文件名及其他
169 0
(二)目录及文件操作