00:01
各位同学大家好,欢迎收看上硅谷Java n IO课程,咱们继续来学习NIO中的重要的概念B。咱们下面呢,来看一下八块里边关于缓冲区的基本操作,然后在里边我们主要来说这么四个操作,然后咱们来先来看一下,看完之后我们用代码给各位来做一个演示。首先我们的第一个呢,叫做缓冲区分片,什么意思呢?就这个过程中呢,除了咱们可以啊分配或者包装一个缓冲区对象之后,还可以根据现有的缓冲区对象创建一个子缓冲区,也就是在现有缓冲区中也可以列为切出一块区域作为一个新的缓冲区,而我们现有缓冲区和它的子缓冲区在底层的里边,数据是共享的,这个叫缓冲区分片,一会咱们用代码做个实现。然后第二个呢,我们叫只读缓冲区,什么叫只读缓冲区,就是这个很简单,也就是说咱们在里边呢,只能读取里边内容,但是不能向它们里边写入数据,然后咱们看第三个,第三个叫什么呢?它叫做直接缓冲区。
01:20
什么叫直接缓冲区呢?它是为了加快咱们IO的速度,用一种特殊的方式为其分配内存的缓冲区,而在JDK中对于它的描述就是给定一个直接字节的缓冲区,然后Java虚拟机可以尽最大鼓励直接对它执行本机的L操作,也就是用这个直接缓冲区能加快咱们的操作的速度,这是第三个,然后还有最后一个,它叫做内存映射文件IO,也就是说这里边是一种读写文件数据的一种方法,它比常规基于流或者通道的方式要快很多,因为它是基于内存进操作的,但是这个过程中呢,我们并不是把整个文件都读到内存中,它一般呢,只是把你读取或者写入的部分才会映射到内存中,所以这是关于里边几个缓冲区操作的这么一个介绍。
02:19
那下面呢,咱们就通过代码方式把每种操作给各位详细演示一下,首先我们看第一个叫做缓冲区分片,这个过程中呢,咱们来调这个slice这个方法来创建一个子缓冲区,那下面呢,咱们来写个例子给各位,咱们来详细也这样一个过程,那我现在在里边首先我先创建是一个方法,我在里边创建我们来一个public。对的,对于这个方法我就叫八块零一啊,咱就叫B01。把这个方法我们先创建,然后创建之后在里边我们写内容,首先咱们先创建一个buffer,那我来一个这个be buffer,我们叫这个buffer。
03:11
等于我们加上一个贝八块,里边这个叫alot,这个方法现在都用过,比如这里边我写个十分,配一个十个大小写的这么一个八分,然后写完之后,咱们像这个八分里边给它先放入一些数据,回头咱们一会儿效果明显,那这里边比如说咱就写一个负循环。然后在负循环里边,我们写一下,就是这个I等于零,I小于八块,点这个FC。然后爱加加再往里边放数据,我们用一个搭点上这个叫的方法,里边搭上一个字节类型的这么一个值,比咱就加上这个I的这个值。
04:01
这样的话,我们将里边放入了数据,然后画完数据之后,下面进入到咱们的核心部分。下面怎么做呢?咱们就来创建一个子缓冲区。在这个过程中呢,我们刚才提到它是在现有缓冲区域中分配一块区域,所以咱们的子缓冲区域,所以咱为了明显,这里边我们把八中的值我们先做设置,这是第一个它那个position,咱们先试一下position值,比如说我现在给它就写成这个三。咱们设置,然后设置之后我再设置里面这个就是limit,它里面这个值,比如说咱写一个这个D啊,为了它能看到这个效果,然后这个写完之后,咱们把这个子缓冲区做个创建,要用B份里面那个来方法,后来创建它的词缓冲区,比如咱们起个名字的这个代,所以这样的话,我们现在把词缓冲区就完成创建。
05:09
然后创建之后呢,下面呢,咱们来改变里边内容,就是像自画区里边给他哪些内容,那我们来做一下啊,就是写一下。改变一下咱们里边那个词缓冲居中的一个内容,给它做一个改变,那这里边我们写下代码,比如现在啊,我也是写一个。循环。I等于零,然后写上这个I小于这个。点上这个CAC。然后爱家家。写完之后,下面呢,我们往里边来写入它的这个内容。那我们来做一下啊,比如说现在我们来这个就是。点上这个艾方法,从里边把这值给它先取出来。
06:03
我们加上一个字节类型的这么一个景名字就叫B。然后写完之后往里边我们给它放下这个数据,用L点上的方法往里边给它放下。Put方法里边呢,有这么一个就是方法,我们来看一下啊,Put中我们根据它的位置,就是in该索引值往里边放数据,那比如说咱们写个二,再加上这个B,为了它的效果不明显,把这个B的值给它稍微改一下,比如就来一个这个B,比如说乘以。十。咱们就写上这个结构,我在里边给它,给它啊,乘以等于这个十,然后把这个给它放进去,这样的话我们就向这个词换成句中加入的这个内容,然后加完内容之后比下面的个,咱把数据给它句子啊,那这里边我把这B法给它回到这个位置,第一个它那个还是给它改成这个。
07:09
零。然后第二个八块里面那个limit还是变成里面那个八块。点上这个太一。看完之后,最后咱们从B中把它的内容给它,最终给它举出来就可以了,那我们来取一下啊,用B点上这个就是哈西铝镁,然后最后里边我们来取一下,比如这个值,咱们给它做个判断啊,就这么写就可以了,这是它大于零啊,然后里边表示它有这个值,其实我们直接打一个这个。有一个方法叫这个哈希准面是可以另外还一个方法哦,记得应该也叫这个里面啊,就是这个值如果说大于零。那咱们从里边把这数据给他取出来,我最终给他出一下啊。
08:04
用八分点艾方法把这个值,最终我们就输出。所各位看啊,现在这段代码我们就完成了,就是创建出一个缓冲区,里边这个分片一个操作,也就是里边这个词换出去,那下面的咱们把代码执行一下,看一下里边的最终的效果是怎么样,现在我来执行一下。然后各位看啊,这里边最终是不是输出我们的值,然后值里边大家特别注意啊,因为咱们缓冲区是在我们这个位置,就是三到七的位置也是这里。34567就这个位置,然后在里边我们看到啊,因为咱们做了一个处理,让这值是不是乘以十啊,所以你看里面几个值是不是变成了30 40 50 60,就是我刚才在特定位置往里边加这个数据,包括最终这些值我们应该都做了输出,所以现在咱就完成里面这个数据子缓冲区。
09:06
分片嘛,这么一个代码,所以各位把这过程给他记住,主要是用到一个方法,这个方法来创建里边这个词换成区。
我来说两句