00:00
我们再举一个案例来说明。这个buffer的使用看一下。我们再举第二个案例。写一个主方法。然后呢,我们来看看。就是ni里面的这个buffer还有哪些可以使用的,来看一下,首先我们我们刚才啊,我们在前面这个案例去创建一个buffer呢,是用的这种方式。我们再来用其他方式来创建啊,创建还是BA buffer。怎么创建呢?我们就用按。点。Copy对我们用。Copy什么呢,Copied?Copy的buffer对,那这里面我们这里就来一个字符串吧哈。
01:00
War。对,然后我们要指定注意,如果我们用的是copy buffer呢,前面是我们的内容,后面呢要指定你按什么样的一种编码来处理好,这边写个char set。我们一般情况下呢,用的是什么呀?UTF杠八。前面呢,我们也用过这个东西了。好拿到了,拿到过后呢,现在我们来返回接收。对,这边我们就写个buffer吧,就叫bad buffer。好的,那现在呢,如果用这种方式来创建一个bit buffer,我们来看看这个better buffer里面的reader index writer index capacity,还有它可读自己怎么去处理啊,来我们用下使用使用相关的,诶相。相关。相关的API,我的方法。
02:00
来玩一下。If,我们先看第一个方法用的比较多的hands,这句话什么意思呢?就说。我们想看看就是你这个buffer里面现在有没有,就是有没有给你分配。一个数组我们在进行下一步的操作,那这个时候呢,因为我我们在这地方已经给他有数据放进去,肯定这边会返回一个处,如果返回一个处的话呢,我们再来看。就是我们能不能取得这个数组,把这个数组打出来看一下,比如说我们用bad buffer点,我们直接取出它的数组,用二返回的就是一个bit数组。好的。这是我们的,相当于是内容吧,Content是不是?这就是可能也是我们取出来过后呢,我们按照这个字节的方式又把它取回来,取回来了过后,假如说我们又希望把它转成一个字符串输出又怎么办呢?来看一下,因为你将来真正在发送的时候,大家想你真正发送的时候,是不是先把我们的字符串做成一个半buffer,然后传输,传输完了过后是不是相当于我要把你的这个信息再重新给你编码一下,也就说你你们可以理解成现在我们在做这样一件事情,这有一个客户端。
03:18
这有一个server端,那么客户端在发消息的时候呢,他先创建了一个bit buffer,然后通过通道发过来。啊,发过来过后,我拿到功能,我想去把这个hello word重新解码看到啊,因为你在读的时候,你先是通过这个buffer把这个数据拿到嘛,对不对,那现在呢,我们下一步接着处理。好,我们我们拿到这个barber勾呢,我们这样去处理,重新将什么呀。将。将这个content转成字串。转成字符串怎么处理?这样做就可以了,System。Out,然后呢,New一个STRING61个string呢,我们先把这个内容放到这个位置,再指定相关的编码,这个编码呢,大家要相互统一对你原先用的是什么编码,现在呢,我们也要用相相应的编码。
04:15
仍然是UTF杠八。是不是好,这就拿到了,如果现在我来运行一下,这边就会输出hello word运行。看一下。跑起来,我们可以看到这边呢,返回一个hello word,当然了,如果我们这边写的有中文,也是一样的北京。那如果我在运行,我们可以看到这边呢,会输出hellowood北京。好,我先撤回去。好,紧接着呢,我们继续往下走。那现在我们来看看通过这种方式创建的bad buffer,它相关的这个,呃,它真实的这个bad buffer里面存的是什么,看一下。
05:00
那走一个。System。点我们就这样说了,我就直接把这个BA buffer输出来。好,等于加BY8分,好,我们再来运行。如果我这样输出,大家看它的类型到底是什么类型呢?就真的是bad buffer吗?显然不是,我们看这个,我们这样通过这种方式来创建你的buffer呢,其实它真实的类型是这个类里面的一个内部类对象,其实它真实类型是这个类里面的这个类。类型哦,就habit by buffer明白,但是大家有没有发现,从这里我们可以看出来,它这个现在这个宽度就外其实是12,也就是说它真实放了,放了多少个字节进去呢?十多少个字节我们数一数一。二三四五六七八九十十一十二对不对,但是它的容量capacity其实是36。那也也就是说,其实我们在创建这个BA buffer的时候呢,它的容量其实是大于它实在这种方式,它的容量其实是大于它实际的这一个放存放的数据的大小的。
06:12
好的,我们继续往下走。下面呢,我们再来看此时此刻还有几个变量哈,我就直接输了点ret,这个呢是我们数组的一个偏移量,然后我们继续往下输。Buffer点,我要看一下它的reader index。Reader index,我就这样去获取,同学们考虑一下这个reader index现在是几。是不是应该等于零呢?你还没读吗?是不是等于零?也就是说你在这种情况下,这个这个数组的偏量是零,而它的reader index也是零,零点继续那么b buffer,我们再来看一下reader,它的这个writer。Writer wi writer buffer。啊,Writer index这个应该是多少呢?同学们想一想。
07:01
应该是多少,你现在存放的是多少呀?存放的是一二三四五六七八九十十一十二,那这个right index大家觉得是多少呢。大家想想。好,我们来运行看一下。你看前面两个是零。前面两个是零,你看现在这个是12。现在这个12,为什么12啊,显然呢,就是因为你你如果要写,要写入的话,其实是在下索引为12这个写,因为12其实代表是第十第13个呃,空间了,能理解,继续往下走。继续往下走,那下面呢,我们再来看一下它的容量怎么去获取呢?Capacity刚才其实大家已经看到了,它的容量其实并不是跟我们这个你存放的数据的那是完全相同的,它是36。好,我们继续往下走,反过来了,我们还要,如果说同学们想去获取它真实的可读取的大小,它也提供了方法,就BY8分呢,他提供了一个这样的方法。
08:08
Read a variable。Variable。好。发挥。长度。Yet。也就是说这边是返回,它可读取,就是当前可读取的自己的数量就可读取。好度。的这个字节数吧,字节数。自己。直接数显然等于12。等于12,为什么12啊,因为你实际存放的就是12个字节嘛,所以说这边呢,这个嫩子,其实12我们可以输出一下。看一下。就是把这些方法API给他用用,明白这意思吧。抛弃了。看一下。这边应该返回的是12。没问题。你看这个认识呢,是12,那我问同学们一个问题啊,我问同学们一个问题,假如我在这做了这样一个操作,你们觉得他有什么变化没有,比如说by buffer,嗯,我做了这样一个操作,呃,盖茨。
09:12
呃,我用这个read read BAT。如果我这样读了一下,我读了一个数据出来,请问这个Les会变成多少?变成多少,是不是就应该变成11了,因为你读了一个,你读了一个这个read reader indu会往面后移,那它这个区间就会减少一个,没没问题吧,我们仔行一下。我们可以看到认识呢,现在就应该变成了11,没问题,好的,所以说这个地方大家可以看到,呃,你你这个一读过后呢,它是有变化的,对不对,认识变成了11。那这个你读出来这个是幺零,为什么是104啊同学们。你你为什么是104,同学们是不是你读的第一个这个H,这个H从阿斯克玛的角度来看,呃,如果我们看这个为什么是14呢?啊,为什么是这个值哈,为什么是。
10:05
为什么是104,是因为你读出来这个H,它对应的阿斯克玛。哦,这们没有没有看到这个阿斯克码啊,那这个同学们可以去查一下,就是这个H对应的阿克码呢,其实幺是104,所以说他这输出的是104,那我问同学们再问大家一个问题,假如我现在这样来这样来玩。我问同学们一个问题,比如说我这样来读取get。Get。BA写一个零,呃,这个地方应该输出的还是104,那请问这边这个认是输出多少呢。这种读法,这这种get by方式不会导致reader。Render应代变化,因此呢,这边还是12。微信。对吧,所以说你两种不同的读法呢,是对这些数据是有影响的,看还是12好继续我们继续往下看。
11:01
继续往下看,还有哪些常用的方法呢?好,我们现在呢,可以这样去读取使用。使用for循环读取。读取,读取出个个字解。那就for循环了,Anti ti。等于0I小于我们的认识。就是我现在要口读的,然后艾佳佳。爱佳家。这个认识其实就是我在刚才已经写的re bits。对吧,然后呢,我们这边就这样来读取了。怎么读呢?这时我们就用but。buffer.get but。这个地方不会导致它的变化啊,所以说我用的是这种方式,同时因为你这个默认情况下,它输的是整数对吧,那如果想输出它的字符,我就用前面转一下。对,这边这边呢,它就会输出什么呀,他就会输出这样一个东西说H。啊,输一个换一行,输一个H,再输一个E就换行,这样输出的。
12:03
叫E再换行哈嘛,就是L了。就是L,再再一个就是L,以此类推,好这个我就运行一下,大家一看就明白了,跑起来这边它会输出什么呢?输出单个单个的字母。是不是这样子的看。OK,我们接着再看还有哪些方法呢?还有两个比较重要的方法哦,还有还有比较重要方法,这个方法大家看一下就是呢,我们也可以针对这个这个buffer,就是里面存的这个buffer呢,读取它其中的某一段。诶,就是读取它其中的某一段。那怎么写呢?来,我们这样去by buffer,它提供了一个方法,叫做get char。Sequence大家可以看到这边呢,Index认识,就是我从这个位置开始读,读取多少多少个长度,然后这边指定是它的一个嗯圈就是字符集,那这边我们这样写,比如说我写个零,这边写个四。
13:04
OK,然后这边呢,我再指定我们的字符集。诶。卡了。Cha said。点什么呢,否定。写上是utf吧。那我问同学们一个问题,如果我这样去取,大家想这边会输出什么东西啊?大家想会输出什么东西,是不是相当于输出了这个从零这个位置取四个呢,就是。Hell运行一下。看是不是这样子的。HELL。果果然这样子的,那我同学们再问大家一个问题,假如我这样取呢?我这样去。怎样取呢?我这边写一个四。这边洗个六。
14:01
这边会返回什么呢?大家想来运行。A。四六会返回什么呢?看一下诶大家看返回的这个,为什么是这个呢,大家想。嗯,首先呢,呃,他从第四个下标索引为四开始读,索引为四的话应该是。这个了。O,所以它第一个呢是O。对吧,读几个呢。读读六个读六个,那就应该这样算嘛。那就是O是第一个。两个三个,四个,五个,六个完全正确,所以说如果说同学们将来想去读取我们这个buffer,就是net提供的buffer,那么我们也可以读取其中的某一段,就是区间。按照。按。按照某个某个范围。范围读取。可以的。好,同学们,那么关于我们bad buffer一些常用的API,我们就先聊到这,后面呢,我们在写程序程序的时候用到的一个方法,我们再加深对它的认识,好,关于这一块的使用就聊到这里。
我来说两句