Netty in action 学习笔记 (前篇)

异步设计

CallBack

Futures

NIO JDK1.4

NIO2 JDK1.7

标准的IO:基于字节流和字符流,面向数据流

NIO:基于通道(Channel)和缓冲区(Buffer),面向缓冲区

读操作:通道 -- 数据 --> 缓冲区

写操作:缓冲区 -- 数据 --> 通道

NIO核心:

Buffer 

Channel

Selector

Buffer 本质是内存片段,Buffer有三个属性:capacity,position,limit

capacity读写模式中都表示容量,capacity和position的含义与Buffer的读写模式有关

Buffer的写模式

默认初始化时position=0,position最大=capacity-1

limit能写入的最大数据量=buffer的容量capacity

Buffer的读模式

position=0,每次读取,position向后移动

limit=写模式时的position

Buffer的成员变量

capacity:int

limit:int

mark:int

position:int

Buffer的方法:

clear():Buffer

flip():Buffer

Buffer的实现类

ByteBuffer,CharBuffer等

IO Model:

blocking IO

nonBlocking IO

IO multiplexing

asynchronous IO 

与network IO相关的两个对象:process(OR thread)和kernel

Selector 调度多个nonblocking IO,检查一个或多个NIO Channel的状态是否处于可读、可写。

Selector实现单线程管理多个Channels,即管理多个网络连接。

Selector属于IO multiplexing的情况

Selector.select() 轮询查找

Channels的四种状态:

Connect

Accept

Read

Write

对应SelectionKey的四种状态:

SelectionKey.OP_CONNECT

SelectionKey.OP_ACCEPT

SelectionKey.OP_READ

SelectionKey.OP_WRITE

Java IO

字符流的本质:字节流读取+查码表(根据码表映射字符)

处理流和节点流的关系:处理流包装节点流,使用到装饰器设计模式,消除节点流的差异。

编码和解码

编码:明文的字符序列 ----> 二进制的字节序列

解码:二进制的字节序列 ----> 明文的字符序列

Netty中:

编码:Java对象 ----> 字节

解码:字节 ----> Java对象

网络数据是一系列字节。 

普通字符串和application/x-www-form-urlencoded MIME字符串

URLDecoder

URLEncoder

猜你喜欢

转载自www.cnblogs.com/mrray1105/p/10810009.html