java中nio知识梳理及实例
最近,我学习了NITY的相关知识,涉及到NiO的相关知识,所以我梳理了NiO的基础。
1. 核心组件
读写是JavaNIO中最基本的操作。您可以创建缓冲区,从通道读取数据,同时将数据写入通道。
- 渠道
- 缓冲区
- 选择器
在NiO中,我们使用通道和缓冲区。NiO中的所有I/O都从一个通道开始。数据总是从缓冲区写入通道,然后从通道读取到缓冲区
2. 频道
Java nio中的通道。在通道包中,让我们看一下继承关系:
2.1袜子通道
Socketchannel用于TCP网络通信,以链接通道。创建socketchannel有两种方法:
- 当连接到达serversocketchannel时
- 打开socketchannel并连接到服务
让我们用选择器查看SoChanChanp客户端-服务器通信框架图:
2.2 SocketChannel的操作
打开SocketChannel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SocketChannel sc = SocketChannel.open(); sc.connect( new InetSocketAddress( "http://localhost" , 8080 )); ByteBuffer bb = ByteBuffer.allocate( 84 ); int bytesRead = sc.read(bb); String newData = "The new String is writing in a file ..." + System.currentTimeMillis(); ByteBuffer bb= ByteBuffer.allocate( 48 ); bb.clear(); bb.put(newData.getBytes()); bb.flip(); while (bb.hasRemaining()) { sc.write(bb); } sc.close(); |
3. Buffers
下面看一下Buffer的继承关系
选择器用于使用单个线程处理多个通道。因此,它需要更少的线程来处理通道。对于操作系统来说,在线程之间切换非常昂贵。因此,为了提高系统的效率
一个选择器处理多个通道。
当向选择器注册一个或多个通道时,我们可以调用select()方法之一。此方法返回一个通道,该通道已为我们要执行的事件做好准备,例如连接、读取、写入和接受。选择的方法有:
Int select():select()方法返回的整数值告诉我们有多少通道可以进行通信。
Int-select(长TS):与select()相同,只是它在最大TS(毫秒)时间段内阻塞
Int selectnow():非阻塞,返回任何准备好的通道
调用任何select()方法后,将返回一个值。然后通过调用selector的selectedkeys()获取所选密钥集合。
分类:
IntelliJ IDEA
标签:
IntelliJ IDEA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现