java中非阻塞网络编程中NIO知识点介绍
来源:互联网 发布:标准差 知乎 编辑:程序博客网 时间:2024/06/07 12:40
1.BIO/NIO/AIO介绍
NIO:采用多路复用的方式select进行事件轮询的来进行实现同步非阻塞的方式。
AIO:异步非阻塞io。
java.nio包中的主要类
其中,SelectionKey类的一些静态常亮表示事件类型,ServerSocketChannel只可能发生一种事情:
1.SelectionKey.OP_ACCEPT:接收连接事件。表示至少有了一个客户连接,服务器可以接收这个连接了。
SocketChannel可能发生以下3中事情:
1.SelectionKey.OP_ACCEPT:接收连接就绪事件。表示客户与服务器的连接已经建立起来,接下来可以进行相互交互。
2.SelectionKey.OP_READ:读就绪事件。表示输入流中已经有了可读数据,可以执行读取操作了。
3.SelectionKey.OP_WRITE:写就绪事件。表示已经可以向输出流写数据了。
SocketChannel提供了接收和发送数据的方法。
1.read(ByteBuffer buffer) :接收数据,把他们存放到参数指定的缓存区对象中。
2.write(ByteBuffer buffer):把参数指定的缓存对象数据发送出去。
其中,ByteBuffer表示字节缓冲区,SocketChannel的read和write方法都会操作它。它继承与Buffer类。为了将它转换为字符串,需要用到Charset类,Charset类代表字符编码,它提供了把字节流转换为字符串(解码过程)和把字符串转换为字节流(编码过程)的使用方法。
缓冲区Buffer
缓冲区主要包含ByteBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer、CharBuffer等等,他们都具有一下属性:
1.容量capacity:表示该缓冲区可以保存多少数据。
2.极限limit:表示当前缓冲区的当前终点,不能对缓冲区中超过极限的区域进行读写操作。limit是可以修改的,这有利于重用。
3.位置position:表示缓冲区中下一个读写单元的位置,每次读写缓冲区的数据均放在position处。
三者关系:容量>=极限>=位置。
缓冲区提供了用于改变上面3个属性的方法:
a.clear():把极限设为容量,把位置设置为0.
b.flip():把极限limit设为位置,把位置设为0.
c.rewind():不改变极限,把位置设为0.
Buffer类还提供了remaining方法用于判断缓冲区的剩余容量等于极限-位置。提供了get(),get(int index),put(),put(int index)等方法进行读取操作。
字符编码Charset类
这类的每个实例代表特定的字符编码类型。把字节序列转换为字符串的过程为解码,把字符串转换为字节序列的过程为编码。
Charset类提供了编码与解码的方法:
1.ByteBuffer encode(String str):对参数str进行编码,返回字节缓冲区对象。
2.ByteBuffer encode(CharBuffer cb):对参数的字符缓冲区进行编码,返回字节缓冲区。
3.CharBuffer decode(ByteBuffer bb):对字节缓冲区数据进行解码操纵。
可以通过Charset类的方法forName(String encode)方法返回一个对象,参数为编码类型。还有一个默认字符编码的方法defaultCharset()来创建对象。
- java中非阻塞网络编程中NIO知识点介绍
- java-netty介绍-NIO非阻塞编程
- Java非阻塞NIO网络编程连接超时的处理
- JAVA 网络编程(2) SOCKET 非阻塞NIO示例
- Java-NIO-网络通信-阻塞
- Java 网络编程nio
- Java NIO 网络编程
- java NIO 网络编程
- Java NIO网络编程
- Java中的NIO非阻塞编程
- Java网络编程——使用NIO实现非阻塞Socket通信
- Java网络编程——使用NIO实现非阻塞Socket通信
- Java网络编程之(三): TCP协议使用NIO实现非阻塞Soket通信
- JAVA 网络编程(3) SOCKET 非阻塞NIO 处理HTTP请求示例
- Java网络编程——使用NIO实现非阻塞Socket通信
- java网络编程(三)----同步非阻塞nio及reactor模型
- Java网络编程之(三): TCP协议使用NIO实现非阻塞Soket通信
- Java NIO --- 网络编程相关
- 人脸检测——MTCNN
- 连接树莓派的方法
- JAVA入门第一季-4.流程控制语句(一)
- yum 安装Tomcat7
- Codeforces Round #373 (Div. 2)-B. Anatoly and Cockroaches
- java中非阻塞网络编程中NIO知识点介绍
- 父容器onTouch和子View的OnClick兼容解决,定制特殊刷新,底部回弹
- 几种c/c++中字符串转整形的方法
- Qt通过UDP传图片,实现自定义分包和组包
- 如何在activity和fragment获取控件的大小
- jquery 定义对象并进行操作
- | 是逻辑变量的运算,取“或”,|| 则是布尔变量的运算,取“或”
- HttpURLConnection post解析
- java至今所学的关键词