00:00
好了,那咱们这个理由创建好之后,我们就开始读呗,开始读是不是?哎,采用BY数组一次读取多个字节。最多读取数组点嫩个字节。啊,最多读取数组点Les个字节,你比如说准备一个bad数组,这个bit数组呢,假如说是new了一个BAT,然后结果是四,那么表示什么呀?就是准备一个什么,准备一个四个长度的BY的数组。对吧,哎,一次最多读取四个字节啊,就放满了。那么现在FS调RAFS调RA的方法,你看有个方法叫RA是吧?哎,你看是不是里边传一个bad数组啊,哎,Bad数传进去,那么这个方法呢,我们有一个异常需要处理一下啊,有异常需要处理,那么这个方法也有返回值,这个返回值跟之前的返回值不一样,这个返回值是读到的自己的数量。
01:03
前边我们这个例子啊,它它的这个read方法返回的是读到的那个字节。大小本身。而我们现在这个方法,它的反馈值是读到的什么是节日的数量?明白吧,这个方法的返回值是读取到的字节数量。不是自己本身啊,不是字节本身。啊,是你读到了几个字节,明白吧,哎,读到几个字节你看啊。嗯。什么意思呢?就是说呀,我现在有个文件。这个文件里边呢,放的这个数据啊,是什么,A呀B呀C呀D呀E呀F,是不是现在呢,在这个位置上呢,就是就是就是大家理解的这个内存。
02:00
然后这就是内存啊,但内存当中有一个BY的数组,这个数组的长度是几啊?是四明白吗?1234。然后接下来呢,我们呢,去调read的方法,RA的方法,调用里面跟一个bad数组。哎,我们一读这个BY的数组长度是四嘛,所以这个时候一次可以读取最多几个呀,四个字节,所以于是乎第一次读的时候就把这四个是不是就咔就放进去了是吧?哎,就放进去了,明白什么意思吧,所以这边呢,其实就是A,这个呢其实就是B,这个呢就是C,这个就是D。他这是个bad数组啊,Bad数组就读进去了。那当读进去了。第一次你读到四个字节,所以反馈值就是四,我们来输出一下,大家看read count是不是就四啊,来执行一下。注意这个方法的返回值啊,它读到了几个字节,它就返回几。第一次读,第一次读到了什么呢?四个字节,因为这个BY的数组是空的嘛,里边都是空空白嘛,是吧,哎,它read的方法读就行了,一读就读到这个bad数组这个流啊,顺着这个这个这个管道是吧,哎,就怎么着就读到这个数组里边了。
03:19
中间他们是有个管道的啊,有个管道,那么读进来之后呢,接下来我会不会再往后读呢。再调RA的方法,把这个bad数组传进去。那么这个时候呢,会返回读到了几个字节呢,各位大家注意听啊,一不注意听你就完了,你就听不懂了。我再第一次调完这个方法,再次调这个方法,我再调这个方法的时候,他会把后面的这个E和F往里边读。但是切记啊各位,我讲到重点了啊,来扣一了,各位有没有在听课?扣一来。扣一啊,重点了重点了各位啊,重点了,不要走神啊,不要走神来,注意看啊,当我第二次再读的时候,由于我现在已经把前四个已经读走了,放到了这个BY数组里边,明白吧,现在呢,我要再次调用这个RA的方法,第二次调瑞的方法还是这个bad数组的话,大家注意听啊。
04:19
那么这块呢,就会把E和F干什么,哎,放到我们BY的数组里边,但是呢,这个E呢,哎,它会放哪儿呢?会放到这儿。把A盖住。明白吗?会再读一什么呀,读一个F。那这个F呢,会把这个盖住,明白什么意思吧,这一次它读到几个字节,两个字节,所以这个方法会返回二。明白吧,第二次只能读取到两个字节,所以这个结果呢,返回的是二。来,走。
05:01
看见了吗?哎,返回二,那么大家注意啊,在这个位置如果再调一次read方法还是这个BAT数组的话,再返回的这个count,注意它就是负一了。就读不到,就是一个自己都没有读到。返回负一。就你如果再去调这个方法的话,往后这块呢就没了。那你没了就代表你一个都没读到,没有读到的话,那这个时候返回的值就是负一了。听明白了吗?来执行一下。看,所以说第一次当你读的时候,读了四个返回四,第二次你只够读俩的。只够读两个,所以返回二。啊,第三次你你为什么只能读俩呀,因为你后边没了呀,你这次只能读俩呀。
06:00
对吧?啊,只能读俩返回二,那其实读到几个字节也返回几,如果读不到任何数据返回负一。读不到任何数据,返回负一,各位啊,这个返回值代表的是什么?再强调一下,是读取到的字节数量,不是字节本身啊,是读取到的字节数量,返回负一表示没读到。明白什么意思吧?好,那么接下来我问大家,我们现在把数据呢,是读到了BAT数组里边,对吧?大家学没学过?如何把一个bad数组转换成字符串?现在呢?是把数据读到一个bad数组里边了,我们能不能把这个数组转换成字符串string?之前我们有没有学过这个构造方法?大家还记不记得在哪里学过?在我们的这个Java包下。我们学过吧?是不是找找浪包下呢,有个string这样的字符串的类。在这个类当中呢,我们看一看这里有一个构造方法,是不是可以传一个bad数组,这样的话是不是就转成string啊。
07:03
转成字符串吧,那么大家思考一下,现在我在这个位置转换成字符串new string啊,括号里边传个bad数组,好,大家看这是不是字符串啊。对吧,那直接把这个拿过来放到这儿。好,大家想这个输出结果是多少?New顿把BY的速度传进去,把BY的速度全部转了。这个呢,肯定是abcd了,因为我们第一次读到的abcd是不是放进去了。所以把这个是A啊,这是B呀,这是C啊,这是D吧,哎,转完之后它肯定是一个字符口abcd,那第二次再读的时候,读了两个看见没有,读了两个是读了谁呢?读的这个E和F,那么这个E和F呢,它会把这个数组当中的这个A和B干掉。把A和B换成E和F,但是记住这个C和D还在,听懂了吗?
08:00
这个C和D还在这个BY的数组里边,你并没有给它清除掉啊。是不是,所以这个时候呢,你再去第二次new这个词的时候,把bad数字整个全部传进去的话,大家想一想这一块是不是就是。Efcd啊。因为你BY的数字里边有两个CD,你只是把AB是不是替换成E了,所以你在这里执行的时候,大家看最后的结果是ABCDEFCD。对吧,显然这种方式是不行的,是不行的,那么大家思考一个问题,那我们应该怎么办呢?这个方法是什么?是不是将字节数组全部转换成?字符串。对吧,下面这个实际上也是一样,是不是把半的速度全部转换成字符串啊。我们不应该全部都转对吧,应该是读到多少个转多少个对吗。各位思考一下,是不是应该读了多少个转多少个,不应该全部都转换,应该是。
09:05
不去了。多少个字节转换多少个,比如说我们应该是调这个构造方法,各位来看这里。这个构造方法是不是可以跟一个bad数组,这个是不是个起始位置和长度?New string的时候,把BY的数组转换成字符串,这个位置是起始位置啊,这个位置是长度啊,对吧,所以说我们这一块是不是应该读了多少个转多少个,从哪开始转,从零开始转,都是从数组下边零开始转。对吧,都是从这个数组下边零这个位置开始转,这是零吗。对不对,读了多少个,读了四个就转四个,读了两个就转,转这两个就行了,后边这个就不用转了。明白什么意思啊,所以这块呢,应该是什么呀?哎,应该是零逗号什么呀,哎,Read count。
10:01
对吧,你把这个拿过来,大家想在这儿是不是应该也是同样的一个道理,不应该全部转换,应该是读取了多少个字节,转换多少个字节。你上面这个其实说白返回的就是四啊。对吧,你下面这个呢,你执行完这个返回的值是不是就是二啊。是不是大家思考一下对吧?哎,这个位置有这样一个技巧,你读了多少个,你读完之后返回值是返回读了多少个字节呀,你读了多少个就是多少个呀,就转多少个就行了,所以这个时候我们执行一下大家看。嗯。最后读到的是不是就是abcd和EF?对吧,文件里边有什么咱就读什么呀。对吧,文件当中有什么我们就读什么。大家看见了吧,哎,文件里边有什么,我们就读什么啊,所以这块的话,咱们呢,我们在这儿不要写四也不要写二,你应该写上一个变量,这样的话更加通用一些。
11:05
就你这个变量返回值是读到的字节数量,你把它拿过来放这儿就行了。对吧,那么接下来我们这个程序肯定得改造,改造成循环。你看这个代码读到了吧。是不是读导是不是转转换了。这是不是也是读到了,这是不是也转换了。对吧,哎,所以说大家要注意这个啊,注意这个。
我来说两句