Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(阻塞式I/O)有所不同。在传统的IO模型中,读写操作会阻塞线程,直到数据准备好或者写入完成。而NIO则引入了非阻塞模式,使得线程在等待数据时可以去做其他事情,提高了系统资源的利用率。 标题"自己写的Java NIO 同步不阻塞IO操作"指的是使用Java NIO库实现的同步但非阻塞的I/O操作。同步意味着程序会一直跟踪操作状态,直到完成;而不阻塞则是指在等待数据时,线程不会被挂起,可以继续执行其他任务。 描述中提到的"用nio想的一个不阻塞NIOSocket例子"可能是一个Java NIO的Socket通信示例,利用NIO的Channel和Selector来实现客户端和服务器之间的非阻塞通信。通常,NIO中的SocketChannel用于网络通信,Selector用于监听多个通道的事件,如连接、读就绪、写就绪等,这样可以同时处理多个连接,而不需要为每个连接创建一个新的线程。 在Java中,`java.nio`包提供了NIO相关的类和接口。例如: - `java.nio.channels.SocketChannel`:用于客户端进行网络通信,可以通过`open()`方法创建,然后连接到服务器的套接字地址。 - `java.nio.channels.ServerSocketChannel`:用于服务器端,可以监听新的连接请求。 - `java.nio.channels.Selector`:通过`open()`方法创建,用于注册感兴趣的通道,并监听这些通道上的事件。 - `java.nio.ByteBuffer`:用于存储数据,支持直接内存访问,可以提高读写性能。 编写一个非阻塞的NIO Socket示例,通常包括以下步骤: 1. 创建ServerSocketChannel并绑定到特定端口,开始监听。 2. 创建Selector,注册ServerSocketChannel并设置感兴趣的事件,如ACCEPT(接受新连接)。 3. 在循环中调用`Selector.select()`方法,获取已准备好的事件。 4. 对于每个准备好的连接事件,创建一个新的SocketChannel,然后将其注册到Selector上,设置感兴趣的读或写事件。 5. 对于读就绪的SocketChannel,从ByteBuffer读取数据;对于写就绪的,将数据写入ByteBuffer并传输。 6. 在处理完所有事件后,再次调用`Selector.select()`,重复以上过程。 在这个过程中,重要的是理解和使用NIO的多路复用机制,这允许单个线程管理多个并发连接,从而减少了线程创建和销毁的开销,提高了系统的并发能力。 文件"NIOSocket"可能是这个NIO Socket通信示例的源代码,可能包含了上述提到的ServerSocketChannel、SocketChannel、Selector和ByteBuffer的使用示例,通过阅读和分析这个文件,你可以更深入地理解Java NIO在实际应用中的工作方式。
- 1
- java_coffeeDouDou2013-05-28你能运行了 再上传 坑人
- 粉丝: 0
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 企业平台生态嵌入数据集(2000-2023年).xlsx
- 离线OCR(此软件解压后双击即可运行, 免费)
- 公开整理-上市公司员工学历及工资数据(1999-2023年).xlsx
- 公开整理-上市公司员工学历及工资数据集(1999-2023年).dta
- GDAL-3.4.3-cp38-cp38-win-amd64.whl(GDAL轮子-免编译pip直接装,下载即用)
- 基于Java实现WIFI探针的商业大数据分析技术
- 抖音5.6版本、抖音短视频5.6版、抖音iOS5.6版、抖音ipa包5.6
- 图像处理领域、QT技术、架构,可直接借鉴
- 【源码+数据库】基于Spring Boot+Mybatis+Thymeleaf实现的宠物医院管理系统
- H5漂流瓶交友源码 社交漂流瓶H5源码+对接Z支付+视频教程