NIO机制总结
Selector selector = Selector.open();
普通的IO流的读取,写入都是一个字节一个字节或一个字符一个字符的循环进行,在这个过程中,程序是阻塞的,inputStream虽然既可以一个字节一个字节的读
inputSream.read(),也可以批量读.inputStream.read(byte[], pos, length),但这样频繁io导致效率很低。虽然也有bufferedInputStream,bufferedOutputStream,
自带缓冲区,但依旧是阻塞的。这样在面对多个连接时,就需要启多个线程,而大量的线程会占用太多的系统资源,线程的切换也会导致效率下降。
而新的IO体系,NIO,可以解决上诉问题。
NIO体系中几个新概念:
1 Buffer
2 Charset
<span style="white-space:pre"> </span>@Test
public void test1() throws IOException{
Charset charset = Charset.forName("GBK");
String str = "hello。中国";
ByteBuffer byteBuffer = charset.encode(str);//将字符流转换成字节流,设置转换字符集
<pre name="code" class="java"><span style="white-space:pre"> </span>//Charset charset1 = Charset.forName("UTF-8");//解码字符集与加码的字符集不一样的化,出现乱码,因为字符转换成字节编码规则的不同转换的字节个<span style="white-space:pre"> </span> //数也不相同
Charset charset1 = Charset.forName("GBK");CharBuffer charBuffer = charset1.decode(byteBuffer);//将字节流转换成字符流,需要对应的字符集System.out.println(charBuffer.toString());}
3 Channel
4 Selector
Selector如何实现无阻塞IO
Selector selector = Selector.open();
SelectionKey key = channel.register(selector, SelectionKey.OP_ACCEPT)
SelectableChannel channel = selectionKey.channel();
Selector selecotr = selectionKey.selector();
Set selectedKeys = selector.selectedKeys();
如果select返回的值不为0,表明有通道上发生事件,则可通过selectedkeys获取所有的key,再通过对应的事件类型在对应的Channel上进行对应的读,写操作。
NIO机制总结的更多相关文章
- 为tomcat启用nio机制
tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态. ...
- Java NIO 机制分析(一) Java IO的演进
一.引言 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员再开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要有以下一些问题: (1)没有数据缓冲区,I/O性能存在问题 ...
- 【深入Java虚拟机】之二:Java垃圾回收机制
[深入Java虚拟机]之:Java垃圾收集机制 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例.谈到Java堆中的垃圾回收,自然要谈到引用.在JDK ...
- Java 垃圾收集机制
对象引用 Java 中的垃圾回收一般是在 Java 堆中进行,因为堆中几乎存放了 Java 中所有的对象实例.谈到 Java 堆中的垃圾回收,自然要谈到引用.在 JDK1.2 之前,Java 中的引用 ...
- JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁
NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...
- 【深入Java虚拟机】之八:Java垃圾收集机制
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18076173 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了J ...
- 浅析java内存管理机制
内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...
- java I/O工作机制
java I/O 的基本架构: 1:基于字节操作的I/O接口 InputStream OutputStream 2:基于字符操作的I/O接口 Writer 和Reader 3:基于磁盘操作的I/O接口 ...
- [HBase] 服务端RPC机制及代码梳理
基于版本:CDH5.4.2 上述版本较老,但是目前生产上是使用这个版本,所以以此为例. 1. 概要 说明: 客户端API发送的请求将会被RPCServer的Listener线程监听到. Listene ...
随机推荐
- 查找类class所在的jar包
CTRL+SHIFT+R 意思是输入关键字搜索当前工程的 对象. CTRL+SHIFT+T 输入关键字搜索当前工程的类.
- iOS开发者计划(转)
苹果对软件和开发者的管理十分严格,你只有加入了Apple Developer计划之后,才能将你的软件放到真机上运行或者发布到App Store上去.这种方法看似麻烦,但是却有效的解决了盗版和劣质软件充 ...
- backbone case
http://coenraets.org/blog/2012/03/employee-directory-sample-app-with-backbone-js-and-jquery-mobile/ ...
- 程序异常捕获库 - CrashRpt
CrashRpt.dll用来在应用程序出现异常crash时,捕获到错误. 并收集出错信息: MiniDump文件.硬件信息.系统信息.出错信息.进程信息.服务信息.驱动信息.启动信息.软件列表.端口信 ...
- 新API:AttachThreadInput
https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms681956(v=vs.85).aspx
- Android4.0以下View的Drag和Drop简单实现
主要代码部分: 实现View的onTouch方法,变换落点的X,Y坐标,定义两个变量存放拖动前的坐标位置. int prevX,prevY; @Override public boolean onTo ...
- mysqll 数据库相互堵塞问题
192.168.11.186 远程访问192.168.11.185 数据库 186上看到: centos6.5:/root#mysql -uroot -p'kjk123123' -h192.168.1 ...
- dump 验证实例恢复的起点和终点
什么时候会产生实例恢复呢?当你数据库服务器异常断电,重启数据库就会发生实例恢复.实例恢复是由数据库自动完成的,无须DBA的干涉.当然这里有个前提条件:数据文件. 在线日志文件.控制文件不得有损坏. 我 ...
- ORACLE数字转换人民币大写
ORACLE 数字转换人民币大写 示例. 数字 :183066999230.68 人民币大写 :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...
- [LeetCode#281] Zigzag Iterator
Problem: Given two 1d vectors, implement an iterator to return their elements alternately. For examp ...