NIO(四)
使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别
1、创建非直接缓冲区测试类
package com.cppdy.nio; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel; //使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别
public class NIOBufferDemo3 { public static void main(String[] args) throws Exception { long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("F:\\cppdy\\1.mp4");
FileOutputStream fos = new FileOutputStream("F:\\cppdy\\2.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();
fos.close();
fis.close(); long end = System.currentTimeMillis();
System.out.println("使用非直接缓冲区复制完毕mp4,耗时:" + (end - start)); } }
2、创建直接缓冲区测试类
package com.cppdy.nio; 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; //使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别
public class NIOBufferDemo4 { public static void main(String[] args) throws Exception { long start = System.currentTimeMillis();
// 直接缓冲区
FileChannel inChannel = FileChannel.open(Paths.get("F:\\cppdy\\1.mp4"), StandardOpenOption.READ);
FileChannel outChannel = FileChannel.open(Paths.get("F:\\cppdy\\2.mp4"), StandardOpenOption.READ,
StandardOpenOption.WRITE, StandardOpenOption.CREATE);
// 缓冲区
MappedByteBuffer inMap = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());
MappedByteBuffer outMap = outChannel.map(MapMode.READ_WRITE, 0, inChannel.size()); // 直接对缓冲区进行数据读写操作
byte[] bytes = new byte[inMap.limit()]; inMap.get(bytes);
outMap.put(bytes);
outMap.clear();
outChannel.close();
inChannel.close();
long end = System.currentTimeMillis();
System.out.println("使用直接缓冲区复制完毕mp4,耗时:" + (end - start));
} }
NIO(四)的更多相关文章
- java学习-NIO(四)Selector
这一节我们将探索选择器(selectors).选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能.就像在第一章中描述的那样,就绪选择和多元执行使得单线程能够有效率地同时管理多个 I/ ...
- Java IO详解(转)
IO是Java及众多编程语言很重要的一块,同时很多程序的瓶颈和耗时操作也都在IO这块. 一.简介 IO操作面临很多问题,信息量的巨大,网络的环境等等,因为IO不仅仅是对本地文件.目录的操作,有时对二进 ...
- centos7下tomcat8.5安装部署与优化
转自:https://www.cnblogs.com/busigulang/articles/8529719.html centos 7 Tomcat 8.5 的安装及生产环境的搭建调优 一 安装to ...
- (转)centos 7 Tomcat 8.5 的安装及生产环境的搭建调优
原文:https://www.cnblogs.com/linhankbl/articles/9149804.html#top JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7.8性能对比) ...
- 【读】为什么BIO效率低下
原因: 假如有10000个连接,4核CPU ,那么bio 就需要一万个线程,而nio大概就需要5个线程(一个接收请求,四个处理请求).如果这10000个连接同时请求,那么bio就有10000个线程抢四 ...
- Java-Socket通信 知识点记录
目录 一.Socket基本案例 二.消息通信 2.1 双向通信 2.2 告知发送结束 2.2.1 通过Socket关闭 2.2.2 通过Socket关闭输出流的方式 2.2.3 通过约定符号 2.2. ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- JAVA NIO系列(四) 选择器
前面介绍过Channel.Buffer,后面的文章主要讲解Selector的实践以及实现原理,选择器的概念比起通道.缓冲区要复杂一些,并且选择器是NIO中最重要的一部分内容. 为什么使用Selecto ...
- Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较(转载)
Tomcat从5.5版本开始,支持以下四种Connector的配置分别为: <Connector port="8081" protocol="org.apache. ...
- NIO(四、Selector)
目录 NIO(一.概述) NIO(二.Buffer) NIO(三.Channel) NIO(四.Selector) Selector 前面两个章节都描述了Buffer和Channel,那这个章节就描述 ...
随机推荐
- python 装饰器前之闭包和装饰器
装饰器: 一, 例如: # vim yue7.py def foo(): print ("fool-------------------") foo() 运行: [root@l ...
- Hbase配置WEB UI界面
1 找到各个节点下面的Hbase-site.xml文件,添加如下配置 <property> <name>hbase.master.info.port</name> ...
- 5-5 re模块 正则表达式
1,正则表达式 正则表达式,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字 ...
- mysql 原理 ~ 死锁问题
一 锁1 锁的定义 1 按照宏观角度 共享锁[S锁] 又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...
- JDBC、DBCP、C3P0、jdbc-pool--链接方式?连接池?
连接方式: java连接数据库的四种方式 - Cece_2012的专栏 - CSDN博客http://blog.csdn.net/cece_2012/article/details/7485482 J ...
- java中有哪4种整形数据类型?它们有什么不同之处?
java中有哪4种整形数据类型?它们有什么不同之处? (byte.short.int和long型)最大值和最小值都不一样.
- linux中管理包的apt和dpkg命令用法
1,apt-get命令 apt-get是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸 ...
- CentOS 7 安装配置 Vsftpd
https://blog.imzhengfei.com/centos-an-zhuang-pei-zhi-vsftpd/ vsftpd 是“very secure FTP daemon”的缩写,是一款 ...
- JavaScript-DOM(重点)
解析过程 DOM树(一切皆是节点) DOM可以做什么 清楚DOM的结构 获取其它DOM(事件源)的三种方式 事件 事件的三要素 绑定事件的方式 JavaScript入口函数 window.onload ...
- Django-jinjia2的赋值
一 变量 1. 变量的形式是:{{ variable }},当模板引擎碰到变量时,引擎使用变量的值替代变量: 2. 使用“.”能够访问变量的属性: 3. 当模板引擎碰到“.”的时候,查找顺序是: a) ...