图片来自于百度图片
NIO的新特性Buffer
前两期我们主要讲述了关于socket连接的问题,这期我们主要说说数据的问题。
自JDK1.4开始,Java提出了NIO的概念。其中有一个很重要的特性叫做面向缓冲,在整个NIO当中,所有操作都是以缓冲区进行的。
认识和使用Buffer
什么是Buffer
Buffer就是缓冲区,对,其实它的功能就是字面意思。创建一个缓冲区,将数据先写或是先读到缓冲区,可以在缓冲区对数据进行操作。
Buffer种类
ByteBuffer
CharBuffer
DoubleBuffer
IntBuffer
LongBuffer
MappedByteBuffer
ShortBuffer
每一个Buffer的主要作用,大家其实从名字都看出来了,byte的缓冲区,char的缓冲区,double的缓冲区........
Buffer的三大重要属性
position
limit
capacity
要想正确理解和使用这三个参数,必须的用代码进行说明
仅仅从一次的执行结果我们还不能看出什么,position到底是长度,还是下标?是limit是总大小,还是capacity是总大小?
通过往buffer里面put值的结果,我们可以看出position就是当前buffer放了多少个字节。那么limit一直和capacity相等又有什么用呢?大家不要急,下面就为你说一说这个limit和capacity的差别。
是不是很神奇,我们前面已经讲过buffer有个重要的特性,那就是可以在缓冲区里面去操作数据,flip后,我们又从0开始读取数据。如果是JDK1.4之前的流是不能往后读取数据的。
因此,我们可以得出结论,capacity其实是buffer的总容量。position和limit在不同场景下的意思不一样。
因此我们可以得出position
Buffer的重要方法
flip:上面的代码已经我们已经见到过flip了,通俗一点的来说,flip的主要作用就是将position和limit的指针移动到当前可读数据的最小值和最大值上面去。如果没有缓冲区,我们的流是不能往回读的,但是有了缓冲区,一切都很简单了。
也就是说,通过flip之后,我们就可以读取缓冲区里面的有效数据了。
clear:将Buffer回到初始状态。当我们把buffer的数据读取出来之后,需要将buffer清空,等待第二次写入数据。clear之后,position、limit、capacity又回到了初始状态。
下期提要
Buffer的主要特点就简单说到这里。上述内容是在实际项目使用最多的知识点,大家务必要熟悉并吃透。下期就真正的开始NIO编程了。敬请期待!
领取专属 10元无门槛券
私享最新 技术干货