每日一学之socket编程(三)

图片来自于百度图片

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相等又有什么用呢?大家不要急,下面就为你说一说这个limitcapacity的差别。

是不是很神奇,我们前面已经讲过buffer有个重要的特性,那就是可以在缓冲区里面去操作数据,flip后,我们又从0开始读取数据。如果是JDK1.4之前的流是不能往后读取数据的。

因此,我们可以得出结论,capacity其实是buffer的总容量。positionlimit在不同场景下的意思不一样。

因此我们可以得出position

Buffer的重要方法

flip:上面的代码已经我们已经见到过flip了,通俗一点的来说,flip的主要作用就是将positionlimit的指针移动到当前可读数据的最小值和最大值上面去。如果没有缓冲区,我们的流是不能往回读的,但是有了缓冲区,一切都很简单了。

也就是说,通过flip之后,我们就可以读取缓冲区里面的有效数据了。

clear:将Buffer回到初始状态。当我们把buffer的数据读取出来之后,需要将buffer清空,等待第二次写入数据。clear之后,positionlimitcapacity又回到了初始状态。

下期提要

Buffer的主要特点就简单说到这里。上述内容是在实际项目使用最多的知识点,大家务必要熟悉并吃透。下期就真正的开始NIO编程了。敬请期待!

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171210G0463I00?refer=cp_1026

扫码关注云+社区