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()获取所选密钥集合。

 

posted @   人生的激活码  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示