[Netty] NIO Channel 概述 类结构层次分析 (六)

框架与中间件 框架与中间件 8207 人阅读 | 0 人回复

本文主要介绍Java NIO中 的Channel类。

通道底层可以理解为封装了一个底层的文件描述符,例如硬件设备、文件、网络连接等。

对于java中的NIO编程来说,只需要对Channel进行管理操作即可,进而借助于Buffer对自己真正关心的数据进行操作。

核心使用

  1. 我需要获取一个Channel,这个Channel是绑定到xxx上的(文件、网络等)
  2. Channel关注的事件注册在Selector上,在对事件安排分工后,静待事件的到来
  3. 事件到来后,对Buffer进行操作,完成数据操作

类结构图

image.png

io必然围绕着读写,所以整个channel的核心也就是读写。

看下方法列表一目了然,核心就是 readwrite

channel的抽象模型是指向文件描述符的一个通道,所以也会有 openclose 的概念

还有网络相关的 bind

额外的还有阻塞、中断以及Selector 注册相关的

图片上右键新标签打开查看大图

image.png

所有的read以及write方法,参数均与ByteBuffer 相关。

Channel

image.png

译文如下:

I/O操作的连接。 通道表示与实体的一个打开的连接,例如硬件设备、文件、网络套接字或能够执行一个或多个不同I/O操作(例如读取或写入)的程序组件。

通道要么是打开的,要么是关闭的。 通道在创建时打开,一旦关闭,它将保持关闭状态。

一旦通道关闭,任何对其调用I/O操作的尝试都将引发ClosedChannelException。

可以通过调用其isOpen方法来测试通道是否打开。

一般来说,Channel对于多线程访问是安全的,如扩展和实现该接口的接口和类的规范中所述。

image.png

1.Java NIO 支持面向字节流的数据读写方式,数据从 ByteBuffer 读取后写到 Channel 中,或者从 Channel 中读取后写入 ByteBuffer 中。 2.Java NIO Channel 支持字节流读写双向操作,一个处于 Open 状态的 Channel,既可以进行读操作、也可以进行写操作。 3.Java NIO Channel 支持阻塞和非阻塞两种模式。 4.Java NIO Channel 是线程安全的。

务必记住,Channel是线程安全线程安全的,所以实际编码中,少了很多后顾之忧和麻烦。

Channel设计拆解image.png

对于最上面,应用层面的Channel,又可以简单地分为两类

image.png

当然,Channel体系不仅仅只有这几个,但是列出来的这几个是比较核心的

比如,网络相关的 NetworkChannel并没有在结构图中标识出来,不要以为Channel就只有那几个类

详细可以直接查看包内的类列表

image.png

比如还有广播

image.png

小结

Channel面向字节,对于底层文件描述符的一种映射。

对于Channel,应用层面主要就是文件以及网络,与他们交互的实体是Buffer,稍后介绍。

核心功能就是围绕着通道的读写。

按照应用的需要有分为了文件以及网络,绝大多数功能都是围绕他们展开的。

核心功能如下:

image.png

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-207-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
海康摄像头接入 wvp-GB28181-pro平台测试验
[md]### 简介 开箱即用的28181协议视频平台 `https://github.c
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。