java网络编程基础BIO,NIO学习

大憨熊 提交于 2020-02-27 04:55:00

网络各个层的数据包格式

即一帧就是以上的,如果 数据太大,那么就分成多个 帧 进行发送 

java.io

输入与输出: 用法可以这样记 :  读进去(input), 写出来(output)

数据源 到 应用 就是 输入流,  应用到  数据源就是 对应 输出流

字节流即处理字节,也就是  1 byte  = 8 bit  

字符流高于 字节流 ,虽然操作数据最基本是字节的,但是 字符流这里并不是一个字节一个字节 去读写的,而是一个字符一个字符去读写的。

字符对应Java就是 char (Character)  , 1 char  需要 2 byte  去存储 

以上是基本的,下面是衍生的复制类,属于包装类:

InputStreamReader 即可将字节转换为字符的作用

OutputStreamReader 将字符转为字节 作用

字节流

以下是包装类

DataInputStream 与DataOutputStream 即可以将字节 转换为对应的 基本类型比如 int ,long

Socket

socket 也是一种数据源。 socket 可以类比为相似现实的 插座, 插上之后就有电流,电流就是IO流

在Unix 系统中 一切皆是文件,因此 socket 也是文件

同步/异步/阻塞/非阻塞

同步或者异步 是 对通信机制上面来说的。即 被调用方的处理结果的形式来说的。

即  被调用方 直接返回结果,就是同步。

如果被调用方 并不会马上返回结果,而是返回一个通知告诉调用方等待结果,然后 处理一段时间之后再返回结果通知调用方 就是 异步。

阻塞与非阻塞对 于 调用方 在获取到结果之前的表现来说的。

如果 调用方在获取到结果之前什么事都不干就是 阻塞式,如果 做了其他事就是非阻塞式的。

因此才会有  同步阻塞,同步非阻塞, 异步阻塞,异步非阻塞  四种通信形式。

NIO

比如 读取,会一直阻塞住,等待消息的的

非阻塞式IO

使用Channel代替Stream ,而stream 是有方向的即 读取和写入。

而 channel 是双向的,既可以读取也可以写入。即有阻塞的读写也有非阻塞的读写

Buffer

channel 的读写通过buffer

 

channel

selector

selector 管理 channel 和记录 channel 的状态

connect 连接状态, accept 接受连接状态, read 读取, write 写状态

sekectionKey 即 每个channel 标识的ID

通过操作selector 即可。 

NIO编程模型

即 handles 与 accept 等等,都是在同一个线程里面处理的

内核IO模型

以上是最基本的NIO,实际中并不会这样用。虽然也是非阻塞式IO但是不够高效

NIO 多路复用

即代码使用 :

selector.select();

这样 NIO就可以 监听多个IO,返回 多个数据。 实际编程就是使用这个模型

异步AIO

因为BIO和NIO都是同步的IO 。 而 AIO是异步的

 

网络web

静态资源

动态资源

tomcat结构

server组件

service 组件

connector 和 Processor组件

Engine组件

Host组件

context组件

wrapper 组件

 

参考  https://www.jianshu.com/p/76ff17bc6dea

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!