SOCKET编程 IO与NIO

socket是网络编程的基础,通过socket不同的计算机之间可以进行数据的交互。

JAVA中IO操作是阻塞的,每个操作都要创建一个线程,容易对资源造成浪费。而NIO的出现解决了这一点,NIO可以通过Selector在单线程的情况下管理多个网络连接。

 IO是面向流的而NIO是面向缓冲区的,NIO属于非阻塞IO。

NIO的核心主要由Buffer,Channel,Selector组成

1.Buffer是内存中的一块,主要用来获取数据,有三大核心:position,limit,capacity

最好理解的当然是 capacity,它代表这个缓冲区的容量,一旦设定就不可以更改。比如 capacity 为 1024 的 IntBuffer,代表其一次可以存放 1024 个 int 类型的值。

一旦 Buffer 的容量达到 capacity,需要清空 Buffer,才能重新写入值。

从写操作模式到读操作模式切换的时候(flip),position 都会归零,这样就可以从头开始读写了。

写操作模式下,limit 代表的是最大能写入的数据,这个时候 limit 等于 capacity

写结束后,切换到读模式,此时的 limit 等于 Buffer 中实际的数据大小,因为 Buffer 不一定被写满了。

 

2.所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地,主要地, java.nio 包中主要实现的以下几个 Channel

FileChannel:文件通道,用于文件的读和写

DatagramChannel:用于 UDP 连接的接收和发送

SocketChannel:把它理解为 TCP 连接通道,简单理解就是 TCP 客户端

ServerSocketChannel:TCP 对应的服务端,用于监听某个端口进来的请求

 

3.Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读、可写

如此可以实现单线程管理多个channels,也就是可以管理多个网络链接

如果在客户端应用且连接数<1000并且并发程度不高的情况下nio不一定更快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值