本文介绍: 所有Socket通道都继承了AbstractSelectableChannel,意味着用一个Selector对象来执行socket通道的就绪选择。
网络IO
所有Socket通道都继承了AbstractSelectableChannel,意味着用一个Selector对象来执行socket通道的就绪选择。
1.1 SocketChannel与ServerSocketChannel
- SocketChannel定义读和写功能的接口,而ServerSocketChannel不实现。ServerSocketChannel负责监听传入的连接和创建新的S哦创可贴Channel对象,它本身不传输数据。
1.1.2 ServerSocketChannel
ServerSocketChannel是一个基于通道的socket监听器,用于监听。
ServerSocketChannel没有bind方法
ServerSocketChannel中有accpeit方法,返回一个 SocketChannel类型的对象。在非阻塞模式下,当没有传入连接等待时,立刻返回null。
Buffer
Java NIO的Buffer用于和NIO通道进行交互,数据从通道读入缓冲区,从缓冲区写入到通道中。缓冲区本质上是一块可以写入数据,然后读取数据的内存。
所有的缓冲区类型都继承于抽象类Buffer:
Buffer的基本用法
- 写入数据到Buffer
- 调用flip:读取数据时,需要通过flip方法将Buffer从写模式切换成读模式。
- 从Buffer中读取数据。
- 调用Clear或者compact方法:clear方法回清空整个缓冲区,compact方法只会清除已经读过的数据。
Buffer的capacity、position和limit
- capacity:
Buffer的固定大小值,一旦Buffer满了,需要清空才能继续写数据。 - position:
(1)写入数据到Buffer时,position表示写入数据的当前位置,position的初始值为0。当插入数据到Buffer后,position会移动到下一个可插入的Buffer单元。position最大值为capacity-1。
(2)读数据到Buffer时,position表示读入数据的当前位置。通过flip方法切换到读模式的时候,position会被重置为0,当Buffer从position读入数据后,position会下移到下一个可读入的数据Buffer单元。 - limit:
(1)写数据时,limit表示可对Buffer最多写入多少个数据。
(2)读数据时,limit表示Buffer中有多少可读的数据。
Buffer写数据
- 通过Channel写数到Buffer
- 通过Buffer的put方法写数据到Buffer
Buffer读数据
- 从Buffer中读数据到Channel
- 使用get方法从Buffer中读取数据
Buffer的常见方法
方法 | 功能 |
---|---|
rewind | 将position设置为0,重新读取Buffer中的所有数据,limit保持不变 |
clear | Buffer中内容清空掉 |
compact | 读过的数据清除掉,未读的数据拷贝到Buffer起始处 |
mark/reset | mark标记Buffer中的一个特定position,通过reset恢复到这个position |
原文地址:https://blog.csdn.net/qq_22152499/article/details/135964650
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_66267.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。