前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一学之socket编程(三)

每日一学之socket编程(三)

作者头像
企鹅号小编
发布2018-01-09 10:59:31
4650
发布2018-01-09 10:59:31
举报

图片来自于百度图片

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编程了。敬请期待!

本文来自企鹅号 - 人人会编程媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 人人会编程媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档