00:02
关于buffer和China的注意事项和细节,我们来聊一下,那前面呢,我们已经使用了buffer,还有China。在使用的过程中,同学们需要注意如下一些事项,第一个,同学们可以看到,在我们使用buffer的时候呢,它支持这个put和get。类型化的就类型化的,Put盖什么意思?我们put放入的是什么数据类型,Get的时候呢,就应该使用相应的数据类型来取出,否则的话呢,就有可能发出一个异常,什么异常就是buffer and floor exception,我们举个例子,也就是说我们在进行这个操作的时候,比如说bad buffer,我们放入的时候是按照int放入的,那么我们在get的时候呢,也要有对应的类型。来获取,否则就有可能抛出异常,我们举例说明,还在这里写。建一个类,我们这次取个名字叫ne。
01:03
Bite。八分。GU。啊,Put get,好吧,Put get,先put再get。主函数现在呢,我们先创建,创建一个buffer。前面我们已经用了很多次了,是吧,BY8本。点OK。然后我们这边比如说64吧,VR。得到了一个bad buffer,我们就取个名叫buffer就可以了。然后现在呢,我往里面放入一些数据,按照类型化的方式类型化。类型化方式放入数据。怎么放呢?比如说第一个我放的是一个int,你看它put后面可以带类型的,对我放了一个100进去。再八分,我再put了一个no,比如它就put no。
02:03
放了一个浪类型的,放这个浪类型呢,我们这样放就可以了,比如酒好这个时候呢,它是以这浪型的方式存放的,那接着我们还有可以放什么呢来。Put一个叉,比如这次我放了一个char进去,比如这次我们放的是上归骨的上。对,那待会你在取的时候,同学们一定要跟这个顺序对应,否则的话就会发生我们刚才说的under。我们刚才说的这个异常看到没有buffer underflow exception。接着我们继续再往放一个,比如这次呢,我们放一个short进去。那一个是。好的,那放的时候,这个时候呢,同学们,我们要把它转一下。因为你放的short类型对不对。放到short类型呢,那你这个是它默认不是是不是,所以说你要把它转成一个short,当然这个地方呢,你也可以加个L。
03:01
你不加的话呢,它会自动给你转成一个L。好,这样我就不加了,接着继续往下看。继续往下看呢,我们来读取取出啊叫取出。取出,取出的时候,首先我们仍然要按照原先所说的进行一个反转。对进反转,进行反转的时候呢,我们来看一下,现在呢,我来进行一个获取的操作。获取的时候,同学们看你第一个放的是一个int,那你在取的时候呢,也要按int方式来取,否则的话就有可能发生我们刚才所说的buffer and floor exception,取的时候怎么取呢?来我们这直接输出哈。点啊,就是我们的buffer.get它也有相应的方法来获取,比如说你put的是它有get,下面以此类推。点八分。
04:00
Get ignore。Get enough。紧接着继续获取。buffer.get1串。再继续获取system。八分。Get什么呢?怎么get short?对这样一个类型,我们运行一下,同学们,我们运行一下很简单。下。那让的时候呢,因为你放入的这个类型跟我取的类型实际上是一样的,所以说没问题,一百九上市,那假如同学们看我把这个顺序颠倒一下。比如说我在这个地方玩了,和char进行一个颠倒,那么这个时候会出现一个什么情况呢?我们运行。但也不一定一定报错啊,因为这个时候呢,他要看他实际情况,我们来看这个时候你看他,你看这个时候他确实没有抛出异常,但是呢,数据类型返出来返回来肯定跟你不一样了,对吧。不一样吧,那我们这次再来换一下,就有可能抛出异常了。
05:04
好,我把这个放到这上面去。在运行。在运行好,看这次有没有抛出异常。好,这次也没有抛异常,我们再换一下啊呃,怎么换一次呢,怎么换啊,比如说这有可能因为他刚好,他刚好就能够把数据取出,只是呢,它有个溢出的操作。诶,这次还没有抛异常是吧,诶你看这是不是很乱,这个异常没有抛出来,应该是会抛出的,我们再来一个吧,比如说我们在get差的时候,这个地方我换一个取的方法。点get一个闹。好吧,Get一个呢。运行。再看一下。啊,你看抛出了异常了,看这时呢,你看你整个这个顺序,因为不不正确,是不是你这最后放的是一个short,但是你get一个no,你看这地方抛出的异常就是bber under floor exception,为什么呢?因为你我们原先。
06:08
原先没有抛错的原因是因为你总始终是在这个范围里面走的int呀,Long啊,Char啊,Short,它没有整个这个内存没有,没有发生这个溢出的情况,而你到这个地方,你就有可能取到我们整个这个分配的内存之外去了,因此呢,它就会抛出这样一个异常,异常是buffer and floor对这样一个异常。所以说这样一个案例就告诉我们什么呢?就是我们在进行类型化put的时候,我们就应该按照相应的类型进行一个获取。好,这个我们说到这里哈,那同样我们把这个复原吧,还是按照原先那个顺序。来获取,第一个呢,我们是get。Int。第二个是get now,我调到上面去。完了过后就应该是一个闹,弄完了是char。
07:05
最后是short。Guide,这就没问题。紧接着我们看第二个细节,我们可以将一个普通的buffer转成只读buffer。也就是说,如果说你认为有一个buffer只允许读取而不允许写入,你就可以把这个buffer进行一个转换,那么同样我们再举一个例子。还在这儿举?写个方法,我们叫做read only。Read only。Read only buffer。同样我们来写一段代码,验证一下怎么用哈,首先我们怎么来玩这个事情呢?我们当然还是按照老规矩,我们先创建。创建一个buffer。对,这个创建buffer呢,前面因为有了,我就直接拿来用一下就行了,这是我们创建好的一个buffer。复制过来。
08:01
好的。Buffer有了过后呢,我们现在用for循环往里面放入一些数据,For循环in ti等于零。I小于多少呢?比如说小于64,好,我们就放64个数据进去,怎么放呢?简单一点咱们就八分。点put。好,我们就放这个I吧。然后把它转成一个bit。对这样转一下,因为你在这放的时候呢,呃,默认情况下是按字节来进行存放的,所以说我把它转成一个BY。转正一个bad过后呢,现在我们要准备读取。读取的时候,读取的时候我首先进行一个翻转操作,Sleep啊flip翻转完了过后呢,现在我要准备这样做将什么呢?诶,我们得到一个这样子啊得到。
09:01
得到一个只读的,只读的buff分,怎么去得到一个只读的buff分呢?非常的简单,它提供了一个方法,就是在我们buffer里面有个方法叫什么呢?叫做as read only buffer,我们来走一下。这是我们的buffer.s大家看可以看到。I read。Read only buffer返回来了。等一下。我们这个时候就拿到一个buffer,这个时候我取个名叫read only buffer。同学们,对于这个buffer来讲啊,你这返回的这个buffer呢,同学们注意。这个buffer呢,你只能去读取,而不能往里面写了,我们来看这两个类型是怎么回事。我们看red buffer,它的一个类型是什么?我们get class。我们运行一下先好吧。我们先运行一下,运行完了过后,我们可以看到这个类型。我们可以看到这个类型是help。
10:04
Help by buffer r。对,是这个类型,当然这个,呃,Help by。呃,Help by read r呢,这个就代表只读的,如果是只读的情况下,我们看一看,这是我们读取是没有问题的,那怎么写呢或循环。还是按照原先的一个循环,我们这样用Y循环来读哈,怎么读呢?我们这边不是有一个read only buffer的吗。怎么读点hands,只要它还有剩剩余的。我们就要用这个方法,Has remaining。好的,只要他还有剩余,我们就读怎么读?Read only点。Get,注意我们以前讲过这个方法呢,会造成我们这个position的指针自己在底层加一,所以这个就没问题,好的,我们执行一下。我们运行吧。
11:01
运行过来运行呢,我们可以看到这边返回的结果跟我想的一样,对不对,就是从零到63。那这个时候呢,注意,因为它已经变成一个只读的了,所以你不能怎么样,你不能往里面放数据,如果放的话呢,就会出现刚才我们所说的一个异常,什么异常大家看这里。啊啊,这个地方会抛出这样一个异常,我说一下它会抛出怎样一个异常呢?就是的。Only。Read only buffer。八分,然后exception。我记得应该是这样写的啊,Exception。CPT抛出read only buffer exception,我们看是不是这样子的,我往里面再放一个数据进去,比如说我放一个100。然后我把它转成一个BAT。好,我们看看此时此刻还能够往里面放数据吗?来执行一下。
12:01
来执行一下,我们看一下。这时呢,我们发现它抛出的是read only buffer exception,对,因为它只是只读的,而不能往里面放数据了。好,同学们,那这两个小的注意事项,同学们要留心一下,就是在使用的时候呢,如果看到别人的框架或者源码里面有这样使用要。你要有一个基本的认识哈,第一个就是类型化的一个操作,比如说我们在放的时候呢,你放的是什么类型,我们在取的时候要按照这个顺序来取。对,要一一对应。第二个呢,如果我们。把一个buffer转成了只读的,那么只能读而不能放好这两点我们先说到这。
我来说两句