本文共 1376 字,大约阅读时间需要 4 分钟。
1. Java NIO
2. Channel
Channel 和IO 中的Stream(流)是差不多一个等级的。只不过Stream 是单向的,譬如:InputStream, OutputStream,而Channel 是双向的,既可以用来进行读操作,又可以用来进行写操作。NIO 中的Channel 的主要实现有:分别可以对应文件IO、UDP 和TCP(Server 和Client)。
3. Buffer
Buffer,故名思意,缓冲区,实际上是一个容器,是一个连续数组。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。 上面的图描述了从一个客户端向服务端发送数据,然后服务端接收数据的过程。客户端发送数据时,必须先将数据存入Buffer 中,然后将Buffer 中的内容写入通道。服务端这边接收数据必须通过Channel 将数据读入到Buffer 中,然后再从Buffer 中取出数据来处理。在NIO 中,Buffer 是一个顶层父类,它是一个抽象类,常用的Buffer 的子类有:4. Selector
Selector 类是NIO 的核心类,Selector 能够检测多个注册的通道上是否有事件发生,如果有事件发生,便获取事件然后针对每个事件进行相应的响应处理。这样一来,只是用一个单线程就可以管理多个通道,也就是管理多个连接。这样使得只有在连接真正有读写事件发生时,才会调用函数来进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程,并且避免了多线程之间的上下文切换导致的开销。转载地址:http://cpmci.baihongyu.com/