标签:font res 最大数 其它 nts 索引 完成 相关 array
多路非阻塞高速网络IO通道
这个概念其是对于程序运行结果的获得方式而言:
同步:在没有获得结果之前或通过轮询的方式不断地询问结果是否产生,在得到结果之前不会返回
异步:调用者在发出调用之后,直接返回没有结果,等待被调用者产生结果之后通过状态通知调用者已完成,在通过回调函数返回结果
阻塞:在执行进程时,在没有得到结果之前,这个进程暂时被挂起,不进行任何操作
非阻塞:在没有得到结果之前,该线程不会停止操作,即不会阻塞当前线程;
概念:Buffer是一个对象,它对某种基本类型的数组进行了封装。NIO开始使用的Channel(通道)就是通过
Buffer 来读写数据的。
(它的实质是数组)
使用 Buffer 读写数据一般遵循以下四个步骤:
1.写入数据到 Buffer;
2.调用 flip() 方法;(将limit=position,position=0,丢弃Mark)更改buffer的读写模式
3.从 Buffer 中读取数据;
4.调用 clear() 方法或者 compact() 方法。 (clear:limit=paracity(容量),position=0,丢弃Mark)
Buffer主要有如下几种:
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffe
ByteBuffer类内部封装了一个byte[]数组,并可以通过一些方法对这个数组进行操作。
创建ByteBuffer对象
方式一:
在堆中创建缓冲区:allocate(int capacity) capacity缓冲区的容量
在堆中创建缓冲区称为:间接缓冲区
方式二:
在系统内存创建缓冲区:allocatDirect(int capacity)
在系统内存创建缓冲区称为:直接缓冲区
间接缓冲区的创建和销毁效率要高于直接缓冲区
间接缓冲区的工作效率要低于直接缓冲区
方式三:
通过数组创建缓冲区:wrap(byte[] arr)
此种方式创建的缓冲区为:间接缓冲区
容量-capacity
Buffer的容量(capacity)是指:Buffer所能够包含的元素的最大数量。定义了Buffer后,容量是不
可变的。
限制-limit
限制limit是指:第一个不应该读取或写入元素的index索引。缓冲区的限制(limit)不能为负,并且
不能大于容量。
有两个相关方法:
public int limit():获取此缓冲区的限制。
public Buffer limit(int newLimit):设置此缓冲区的限制。
位置-position
位置position是指:当前可写入的索引。位置不能小于0,并且不能大于"限制"。
有两个相关方法:
public int position():获取当前可写入位置索引。
public Buffer position(int p):更改当前可写入位置索引。
标记-mark
标记mark是指:当调用缓冲区的reset()方法时,会将缓冲区的position位置重置为该索引。不能
为0,不能大于position。
相关方法:
public Buffer mark():设置此缓冲区的标记为当前的position位置。
其它方法
public int remaining():获取position与limit之间的元素数。
public boolean isReadOnly():获取当前缓冲区是否只读。
public boolean isDirect():获取当前缓冲区是否为直接缓冲区。
#常用方法
public Buffer clear():还原缓冲区的状态。
将position设置为:0
将限制limit设置为容量capacity;
丢弃标记mark。
public Buffer flip():缩小limit的范围。
将limit设置为当前position位置;
将当前position位置设置为0;
丢弃标记。
public Buffer rewind():重绕此缓冲区。
将position位置设置为:0
限制limit不变。
丢弃标记。
标签:font res 最大数 其它 nts 索引 完成 相关 array
原文地址:https://www.cnblogs.com/xiaojians/p/12631503.html