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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vmware-VMnet8一键启动和停止脚本
- 可移植的 Python 数据框库.zip
- 包含 Andrei Neagoie 的《从零到精通掌握编码面试 - 数据结构 + 算法》课程的所有代码示例,使用 Python 语言 .zip
- 数据库课程设计(图书馆管理系统)springboot+swing+mysql+mybatis
- C++ Vigenère 密码(解密代码)
- zblog日收站群,zblog泛目录
- C++ Vigenère 密码(加密代码)
- Vue Router 是 Vue 生态系统的一部分,是一个 MIT 许可的开源项目,其持续开发完全在赞助商的支持下成为可能 支持 Vue 路由器
- PM2.5 数据集 包含上海、成都、广州、北京、沈阳五地的PM2.5观测,csv文件
- 电动汽车与软件定义汽车(SDV)时代的汽车行业数字化转型