标签:控制 targe strong blank 方式 单线程 str 步骤 数据
面向流的IO体系一次只能处理一个字节/字符,效率低,且在数据源中没有数据时会阻塞线程。Java-4提供的新API,Non-blocking IO(New IO,面向块的IO体系)为所有的原始类型提供Buffer缓存支持。采用内存映射文件的方式处理输入输出,将文件或文件的一段区域映射到内存中,模拟OS中虚拟内存的概念,提高IO速度。
区别:
Sun官方标榜的特性:
- 为所有的原始类型提供缓存(Buffer)支持;
- Java.nio.charset:字符集编码解码解决方案;
- Channel:一个新的原始I/O抽象;
- 支持锁和内存映射文件的文件访问接口;
- 提供多路非阻塞式(non-bloking)的高伸缩性网络I/O;
思路:分而治之、专人入则专门的任务,多路复用IO,解决处理速度的差异,避免阻塞带来的多进/线程间的上下文切换。
工作原理:
NIO的核心的API:Channel,Buffer,Selector
通道,对传统IO系统的模拟,传输数据,但是双向的、可读可写,支持异步I/O。Channel对象通过IO流对象的getChannel()方法获得。其map()方法将“一块数据”映射到内存中。
缓冲区,连续内存块、本质是数组,支持多种数据类型,数据读写中转站。顶层父类、抽象类,最常用的是ByteBuffer。一个buffer主要由position、limit、capacity三个变量控制读写过程:
函数:
步骤:
内存映射文件I/O
一种读和写文件数据的方法,将文件中实际读取或写入的数据映射到内存中,速度更快。
MappedByteBuffer类,继承于ByteBuffer类。
选择器,支持NIO非阻塞式、基于Reactor模式的工作方式,实现非阻塞I/O的核心对象是Selector。允许单线程监听和处理多个Channel的事件。通过注册Channel事件到Selector,再调用方法select()获取到达的事件并对事件响应处理。
SelectionKey
一个SelectionKey表示一个到达事件,包含事件的状态信息以及对应的通道的绑定。
参考:
标签:控制 targe strong blank 方式 单线程 str 步骤 数据
原文地址:http://www.cnblogs.com/wjcx-sqh/p/6002308.html