每日一学之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编程了。敬请期待!

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面

前言 本文于2016-10修改 这次的代码是基于上一节的代码集成的,素材都在第二节里头 本次添加登录页面的控制器即可 实现 添加Account的Index...

32480
来自专栏IT技术精选文摘

攻破JAVA NIO技术壁垒

现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个Java攻城狮的加分技能...

28170
来自专栏圣杰的专栏

Asp.net mvc 知多少(五)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

40260
来自专栏finleyMa

Laravel 用户权限管理

实现基于user,role,permission三表的权限管理 因为一个用户可能拥有多种role,而一种role能同时被多个用户拥有。所以要建立多对多关系。 ...

92150
来自专栏iOS技术杂谈

iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里

你要知道的NSURLSession都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本...

842100
来自专栏熊二哥

快速入门系列--WebAPI--04在老版本MVC4下的调整

WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了。在之前的介绍中,基本上都基于.N...

24860
来自专栏yukong的小专栏

解开BIO、NIO、AIO神秘的面纱

本文内容涉及同步与异步, 阻塞与非阻塞, BIO、NIO、AIO等概念, 这块内容本身比较复杂, 很难用三言两语说明白. 而书上的定义更不容易理解是什么意思. ...

14540
来自专栏Star先生的专栏

从源码中分析 Hadoop 的 RPC 机制

RPC是Remote Procedure Call(远程过程调用)的简称,这一机制都要面对两个问题:对象调用方式余与序列/反序列化机制。本文给大家介绍从源码中分...

77100
来自专栏分布式系统进阶

ReplicaManager源码解析1-消息同步线程管理

基本上就是作三件事: 构造FetchRequest, 同步发送FetchRequest并接收FetchResponse, 处理FetchResponse, 这三...

17920
来自专栏移动端开发

NSURLSession 所有的都在这里(二)

29030

扫码关注云+社区

领取腾讯云代金券