Java NIO 利用通道完成文件复制(MappedByteBuffer)

相关学习网址:

import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

import org.junit.Test;

@Test
public void test2() throws IOException{
long start = System.currentTimeMillis();

    FileChannel inChannel = FileChannel.open(Paths.get("1.mp4"), StandardOpenOption.READ);
    FileChannel outChannel = FileChannel.open(Paths.get("2.mp4"), StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE);

    //内存映射文件
    MappedByteBuffer inMappedBuf = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());
    MappedByteBuffer outMappedBuf = outChannel.map(MapMode.READ_WRITE, 0, inChannel.size());

    //直接对缓冲区进行数据的读写操作
    byte[] dst = new byte[inMappedBuf.limit()];
    inMappedBuf.get(dst);
    outMappedBuf.put(dst);

    inChannel.close();
    outChannel.close();

    long end = System.currentTimeMillis();
    System.out.println("耗费时间为:" + (end - start));
}

原文地址:http://blog.51cto.com/11056727/2173580

时间: 2024-08-05 06:49:09

Java NIO 利用通道完成文件复制(MappedByteBuffer)的相关文章

使用Java语言如何实现快速文件复制?

今天review代码又看到某个"大神"使用古老的方法来实现文件的复制,今天归结一下使用Java语言如何实现快速文件复制: 代码1: 代码2: 运行上述Java代码,代码1和代码2复制同样的文件其结果如下:

Java NIO3:通道和文件通道

通道是什么 通道式(Channel)是java.nio的第二个主要创新.通道既不是一个扩展也不是一项增强,而是全新的.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据. 通常情况下,通道与操作系统的文件描述符(FileDescriptor)和文件句柄(FileHandler)有着一对一的关系.虽然通道比文件描述符更广义,但开发者经常使用到的多数通道都是连接到开放的文件描述符的.Channel类

Java NIO之通道

通道 通道基础 通道打开 通道使用 通道关闭 Scatter/Gather 文件通道 文件通道代码示例 Socket通道 Socket通道代码示例 总结 通道 channel用于字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效的传输数据. 通道时一种途径,通过这种途径,可以用最小的总开销来访问操作系统本身的IO服务,缓冲区则是通道内部用于发送和接受数据的断点. 通道基础 顶层接口Channel,次级接口WritableByteChannel.ReadableByteChanne

Java NIO FileVisitor 高效删除文件

在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效   2.电子名片二维码前几天有效,这些参数都是可配置的. 刚开始时,直接用Io 文件操作,递归删除文件,根据场景判断删除逻辑.但是,压力测试后发现,删除十几G文件要20分钟,直接测试不过.原因分析:在所有的5级目录下,要遍历匹配条件的文件,将不符合文件的删除,删除又用了递归,所有一下有三层循环,这样直接遍历数据太大,

java nio读取和写入文件

读取 package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.text.MessageFormat; public class Test

java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式

复制文本文件:把当前目录下的FileIntputStream.java文件里面的内容复制到当前目录的b.txt文件中 分析: 数据源: FileIntputStream.java -- 读取数据 -- FileInputStream 目的地: b.txt --- 写入数据 ---- FileOutputStream 思路:首先读取数据源的内容,然后把读取到的内容再写入到目的地中 前提:数据源存在,否则会报错 1 import java.io.FileInputStream; 2 import j

Java NIO之通道Channel

channel与流的区别: 流基于字节,且读写为单向的. 通道基于快Buffer,可以异步读写.除了FileChannel之外都是双向的.   channel的主要实现: FileChannel DatagramChannel:UDP读写 SocketChannel:TCP读写 ServerSocketChannel 支持scatter/gather(分散和聚集) 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中.因此,Channel将从Channel

java nio通过ByteBuffer输出文件信息

1.通过ByteBuffer的get()方法每次读取一个字节转换成char类型输出. fc = new FileInputStream("src/demo20/data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); buff = ByteBuffer.allocateDirect(BSIZE); fc.read(buff); buff.flip(); while (buff.hasRemaining(

java nio 快速read大文件

If you want to make your first example faster FileChannel inChannel = new FileInputStream(fileName).getChannel(); ByteBuffer buffer = ByteBuffer.allocateDirect(CAPACITY); while(inChannel.read(buffer) > 0) buffer.clear(); // do something with the data