使用非直接缓冲区与直接缓冲区进行文件的复制(基于Channel)
一、利用通道完成文件的复制(非直接缓冲区)
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("g:/29.mp4");
FileOutputStream fos = new FileOutputStream("g:/30.mp4");
//获取通道
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel();
//分配指定大小缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
//将通道中的数据存入缓冲区
while (inChannel.read(buf) != -1){
buf.flip();
//将缓冲区的数据写入到通道中
outChannel.write(buf);
buf.clear();//清空缓冲区
}
outChannel.close();
inChannel.close();
fis.close();
fos.close(); long end = System.currentTimeMillis();
System.out.println("消耗的时间为:" + (end - start));//
二 、使用直接缓冲区完成文件的复制(内存映射)
long start = System.currentTimeMillis();
FileChannel inChannel = FileChannel.open(Paths.get("g:/29.mp4"), StandardOpenOption.READ);
FileChannel outChannel = FileChannel.open(Paths.get("g:/30.mp4"), StandardOpenOption.WRITE,StandardOpenOption.READ, StandardOpenOption.CREATE); //内存映射文件
MappedByteBuffer inMappedBuf = inChannel.map(FileChannel.MapMode.READ_ONLY,0,inChannel.size());
MappedByteBuffer outMappedBuf = outChannel.map(FileChannel.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));//
使用非直接缓冲区与直接缓冲区进行文件的复制(基于Channel)的更多相关文章
- DirectX11 With Windows SDK--03 索引缓冲区、常量缓冲区
前言 一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重复4次甚至5次.这样的绘制方法会占用大量的内存空间. 接下来 ...
- TCP的发送缓冲区和接收缓冲区
TCP协议是作用是用来进行端对端数据传送的,那么就会有发送端和接收端,在操作系统有两个空间即user space和kernal space. 每个Tcp socket连接在内核中都有一个发送缓冲区和接 ...
- UNIX环境高级编程——标准I/O库缓冲区和内核缓冲区的区别
1.C标准库的I/O缓冲区 UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可 ...
- Java中的字节流,字符流,字节缓冲区,字符缓冲区复制文件
一:创建方式 1.建立输入(读)对象,并绑定数据源 2.建立输出(写)对象,并绑定目的地 3.将读到的内容遍历出来,然后在通过字符或者字节写入 4.资源访问过后关闭,先创建的后关闭,后创建的先关闭 ...
- C 标准库IO缓冲区和内核缓冲区的区别
1.C标准库的I/O缓冲区 UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也 ...
- JAVA学习第四十八课 — IO流(二):文件的复制 & 缓冲区1
一.复制文本文件 将G盘的文本文件拷贝到D盘上 也就是 读取G盘中文本文件的数据.写入D盘中->连读带写 而剪切呢.就是连读带写后,删除原盘的文件 <span style="fo ...
- 23. Node.Js Buffer类(缓冲区)-(三)文件读取实例
转自:https://blog.csdn.net/u011127019/article/details/52513109
- jmeter 非GUI执行测试,导入jtl文件没有响应数据出来办法
jemter 官方也一直强调要在非GUI下执行 Run your JMeter test in command-line non-GUI mode as 在linux下执行jmeter压力测试,生成j ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
随机推荐
- css绘制倒三角
<style> i{ border-left: 5px solid transparent; border-right: 5px solid transparent; border-top ...
- php会话(session)实现原理
先考虑如下问题: 禁用了cookie,session能否使用? 如何把session存储数据库/memcached/redis 如何实现一个严格的30分钟过期的会话?. 如何实践web服务器集群的会话 ...
- C/C++语言简介之编程开发
一.编译器 GCC:GNU组织开发的开源免费的编译器. MinGW:Windows操作系统下的GCC. Clang:开源的BSD协议的基于LLVM的编译器. Visual C++:Microsoft ...
- jdbc 报错解决办法
刚刚看到一个童鞋出现了这个问题 其实这个问题很好解决 在工程中创建一个lib目录: 然后讲mysql包复制进去 然后对着包点击右键 build path就可以了 最后面再次运行就可以了 jar包地址下 ...
- web1 - HTML&CSS
Brackets 编辑器的安装和使用 Emmet:HTML/CSS代码快速编写 HTML && CSS
- C#图片的读取和转码
刚写完自定义头像模块,记录一下刚才的过程,直接上代码: public static string ImgByte() { //获取图片地址 string path = UnityEngine.Appl ...
- CodeForces-748C
这题就是确定一个点,然后去找能够实现最短距离的点且距离最远的点,因为题目要求点最少.在查找时,如果从最后的点开始枚举,找到的第一个满足距离最短的点一定是最远点,但是查找的复杂度是O(n),共有n次查找 ...
- sed 命令多行到多行的定位方式
本文提要: sed 命令定位方式的分类 着重对 /pattern/,/pattern/ 的定位方式进行阐述 定位方式分类 总体上,只需要分为两类,即:x 和 x,y .如果在范围后加 ! 则表示取补集 ...
- PhpStorm如何下载github上的代码到本地
1.看着菜单栏有一个VCS(Virus Capture Scripter)集群服务器的选项,选择其下面的Checkout from Version Control,然后 (1)选择GIT:输入git的 ...
- SpringMVC的标签库
Spring2.0版本开始后,提供了一组功能强大的标签用来在JSP和SpringWebMVC中处理表单元素 ,可以用来访问控制器处理命令对象和绑定数据: 以下是表单标签 ...