NIO
相关概念
一、缓存区:表示数据存放的容器,提供可读写的数据缓存区 |
直接缓存区:allocateDriect 在内存中直接创建,绕过JVM的堆和栈。 —直接操作物理磁盘,不复制 非直接缓存区:allocate 直接在JVM创建。 —先复制物理磁盘的值,在JVM中操作,再读写到物理磁盘 速度 :直接缓存区>非直接缓存区 创建和销毁的开销:直接缓存区>非直接缓存区 |
二、字符集:用来对缓存数据进行解码和编码,在字节和Unicode字符之间转换 |
IO流:"".getBytes(“UTF-8”)的方式对目标字符串进行编码处理,此方法 NIO:在java1.7以后,NIO提供了StandardCharsets类,此类里面提供了NIO方式 |
三、通道:用来接收或发送数据,提供与文件、套接字等的连接。 |
通道即为:Channel -- 通道相当于“流”,但是不参与读写数据,作为数据的传输通道(这个通道是双向的)存在。其需与ByteBuffer进行交互合作,buffer并能在Channel中 |
四、选择器:NIO中最有意思的部分--> 非阻塞IO |
通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有可供读取的数据。同 Dispatch : 线程组 Reactor反应器模式:或者说观察者模式--->是用于处理并发服务请求,并将请 SelectionKey:当有读写等任何注册事件发生时,可以从Selector中获得相应的 |
JavaNIO三大组件: Buffer、Channel、Selector
java.nio包
一.Buffer |
本质: 核心:ByteBuffer 理解:Buffer理解为一个数组,操作Buffer和操作数组、类集差不多,不过是在NIO场景。 —IntBuffer对应int[]、CharBuffer对应char[]、DoubleBuffer对应double[] —MappedByteBuffer用于实现内存映射文件 属性:position、limit、capacity 位置、限制、容量 方法:put()添加数据、flip()切换到读模式、get()获取数据、clear()清空数据 读模式: 写模式: 切换模式:flip() :position归零 对比: 读模式:先mark(),然后reset() —mark():临时保存position值,每次调用此方法,mark设为当前的position,便于后续需要的时候使用 —reset():调用reset(),position回到mark的地方 写模式 —rewind():重置position为0=从头读写Buffer —clear():填充Buffer,读取数据,调用clear(),重新填充。【覆盖填充】 —compact():填充Buffer,读取数据,调用clear(),将position到limit间的数据左移, 重新填充[【接力填充】 常用ByteBuffer,其他只是做了些包装 |
初始化Buffer ByteBuffer byteBuf = ByteBuffer .allocate(int capacity) 静态方法 填充Buffer byteBuf.put(); 提取Buffer中的值 byteBuf .flip(); |