00:01
各位上硅谷的朋友们大家好,欢迎继续收看上硅谷Java n IO课程。在刚才内容中呢,我们讲到这个China,咱们说到channel,它主要做法就是从channel里边读取数据到缓冲区,然后从缓冲区中写入数据到咱们的channel中去。channel主要有以下这么几个实现,这几个实现呢,分别对应我们的文件IO以及udptcp的网络O,那下面呢,我们就详细介绍一下里边的这几种通道,首先我们看第一个通道,这个通道叫做file channel file channel呢应该是这些里边的最长一个通道,它对应的是文件IO,在这里边的有很多方法,比如说大家看到这里边标出来的有read write等等,Read是什么操作,是不是读操作right,那肯定就是写操作,所以我下面把里面的一个过程给个未来做一个。
01:01
演示咱们首先先写一个例子,这个例子中呢,我们做什么呢?给各位说一下啊,比如说咱们就通过这个。Fair China读取数据到一个buffer中去,这个过程中呢要用到buffer,所以这个buffer给各位先做一个基本介绍,咱们后面的章节中把buff块会做一个详细的讲解,那8UFF咱往下看啊,我这里写到8UFF块通常的操作无外乎就是这么几个过程,第一个数据写入到缓冲区,第二个调方法反转你的读写模式,然后第三个从缓冲区中读取数据,最后一个再调方法清除缓冲区的那种,无外乎就这过程。所以下面呢,咱就来写个例子,在例子中就来实现一个file channel读取数据到八括这个过程,那下面我们来看一下这个代码咱们该怎么去做。
02:00
我在这个位置呢,首先我先建个类。这个类我起个名字。咱们叫这个file。这个M1。是我变的这么一个类,然后在类里边呢,我加上一个论方法,论方法中来实现,咱们刚才说这个意思,我在这里边写一下是。通过。然后咱们读取数据。套这个阿里边或者阿中学,咱们来凑这么一个例子,那这例子怎么做?首先我先写一下咱们代码的一个基本过程,写完过程之后,咱们再用代码把这个最终做一个实现,那下面我们来写一下这个基本过程。首先我们的第一步操作,咱们做什么的,是不是又要创建一个China,因为咱们要用到这个file channel,这个通ER,这是第一步,然后这个做到之后,咱的第二步是不是要创建一个这个buffer缓冲区,这是第二步,然后咱到第三步操作,那就是通过file China读取数据,是不是到这个buffer缓冲去住,所以这是我们一个最基本的一个过程。
03:28
那下面就在这过程中完成咱们的代码编写,首先我们看第一步怎么建一个channel,给大家强调啊,File channel呢,并没有直接方法创建,咱需要通过文件进行创建,而文件首先咱需要获取到,那怎么获取,我觉得各位同学应该知道啊,咱们最原始方式通过流是会做到,比如说你的输入流或者输出流,但是咱们现在给各位换一种方式,里边有个对象名字。
04:00
叫做random a set file,用它来得到咱的文件,那比如说咱现在就new上一个random a在,然后在里边我们可以传入两个参数,第一个参数是你文件的录制嘛,第二个是你操作那个模式,什么叫模式?比如说你是读还是写操作,那第一个我们写个路径。我这里边呢,在我的D盘中,我提前创建好了一个文件附叫零一.t然后第二个这个模式,比如咱们来一个RWR代表什么?是不是读,W代表写,就是读写的模式是我们的第一步先得到你的文件,然后里面有异常,咱把异常给它先RO出去。就是里边的这么一个异常。直接啊,咱给他Rose一下。这里边我就直接throw它这个一个type,所以这是第一部分,然后这个做到之后,咱通过这个ACE里面这个方法k channel来得到咱这个fair channel这个对象,这就是我们的部分怎么创建一个fair对象,这个完成了,完成之后咱们看第二步操作,第二步呢,我们要建个buffer,那这里边我们用一个咱就用这个at buffer,自己类型的buffer里面一个方法叫alo,创建一个buffer,分配它的大小,比如说咱们来一个1024,最终返回这个叫be这个buffer。
05:38
啊,那我们起名就叫这个B。这是我们的第二部分,建一个八块,然后创建之后,下面呢,咱来调方法,就是开里边刚才咱们变那个叫read方法,里边传这B块,听这个读取的这个过程,最终有个返回值,比如说咱们起个名字啊,我叫这个be,这个read,因为咱们做的是一个独套装。
06:06
所以这样的话,把这个一本结构写出来了,然后写完之后,下面咱开始的一个过程,首先大家注意啊,这个值表示你读到那个内容,这个值如果说里边的内容是负一,那就表示读到你的最后一行,就这个值负一,那表示就结束了,所以咱们做个判断,如果说这个值不等于负一,那咱们进行操作,等于负一,那咱就表示结束了,那这里边我来判断。如果说它不等于负一,那就表示我们有内容,这个时候比如说我先做个输出啊,我写下啊,比如现在我写一个就是读取了你的多大,咱们把这个bit read先做一个输出,看这值一会是什么,然后这个做到之后,下面咱开始做这个操作。这过程中,因为咱把数据是要读取到八份里面去了,而八份中的数据咱可以把里边取出来,看数据有没有读进去。
07:07
不是,各位是否能听懂啊,我把数据要读取到是八分中去,那我从里边给它拿出来看数据有没有啊,那我们来做一下啊,这边我们用8UFF份,里边有一个方法,这flag背个读写这种模式的转换,因为他们读进去了,那我从里边取看能不能得到,这里边我来一个方法。While里边呢,有这么一个方法写下啊,就是8UFF份,点这个哈希remain,就表示里边是否有剩余的内容,如果有的话,咱们从里边把它的值给它拿出来,复式里边一个艾方法可以取到啊,咱们给它直接转一个字节形式啊,就是它的角,所以这样的话把这就得到了,然后呢,给它拿出来之后,最后咱们把B搭上一个叫可粒,就是给它图下啊,包括最后我们如果再有的话,继续进行这个注意操作,用这个panel里边这个叫read的方法加上一个八块。
08:07
因为现在这个读的过程我们就完成了,就是里边这个代码,然后这个做到之后,最后咱把这个a file做一个close啊,包括最后为了测试我在做输出,说咱们这个操作就已经这个。结束了。所现在呢,通过这个流程,咱们就完成了一个通过file channel读取数据到buffer的这么一个过程,这代码我们就写出来了,但是这里边这个buff份呢,其实这个过程中会有很多的细节,咱们在后面章节中会写到,这里边给各位主要演示他这个流程。那下面呢,咱把代码执行一下,看一下它的结果是怎么样的,咱们来执行啊,然后大家看一遍啊,首先读取了它的大小是不是19,就是这个BI read是19,然后这是里边那个内容,就是咱读到八个钟内容啊,这内容应该是在我的这个文件中。
09:10
零一.t啊,这是我刚才随便加的内容,然后把它读到最终提出我们说它已经结束了,所以这就是咱们完成的里边的针对file channel的读取到buffer中的一个例子,所以各位把这个代码给他好好去看一看啊,这个我们就做了一个演示。
我来说两句