00:01
各位同学大家好,欢迎继续收看上硅谷Java n IO课程,咱们继续来学习NIO中的另外一个类叫做a channel,而这个类呢,大家注意,在JAVA7开始NIO中就添加进来的这个类,它表示通过异步方式将数据写到文章中去,那这个类A的file channel怎么去用?下面给各位来做一个详细的说明。首先我们看第一个啊,就是怎么创建这个异步文件通道的这个对象,它的做法就是呢,调里边的open方法进行创建,在open方法中咱们可以传两个参数,第一个参数就是这个pass对象,然后第二个参数咱们通过这个就是a file channel,对文件我们可以做什么操作,比如说各位看我这里写到的是不是用这个read,那就表示对文件做一个读的这个操作,所以这是关于怎么创建这么一个异步文件通道这个对象,然后这个说完之后呢,下面给各位来演示一下咱们怎么通过异步文件通道进行读,进行写的操作。
01:17
首先我们先看怎么进行读的操作,读的操作呢?这里边有两种方式,第一种方式是通过这个对象叫future里边的read方法进行实现,然后第二种方式用这个对象叫comp handle进行实现,那下面的给各位先来演示第一种方式通过future进行数据的读取过程,那下面咱们直接通过代码过程给各位同学,我们来详细演示一下里面的过程。下面呢,我们在代码里边,比如现在啊,我这里边我来创建这么一个类啊,这个类我这里边先有一个,我把这些代码给它去掉啊,咱们重新创建这么一个类。
02:03
就这个啊,我这个先给它删掉,然后在类里边呢,比如现在我们在里边呢,我们就写上这么一个方法,这方法给各位演示,通过future进行这个就是读的这个过程,那这里边我来写一下,首先我加上一个test的,然后咱们加上方法。Public。我们写上里边的这么一个方法。然后这个方法,我给它起个名字,我们就要这个这个。也就叫ay c channel啊,咱们就叫这个名字,给它做一个读的这个操作,然后咱通过这个叫future。进行这么一个过程,所以这是我们写的第一个方法,然后在里边再来实现这个过程,那过程怎么做?首先我把这个基本步骤给各位写一下,然后咱们还是按照步骤来实现一下它,最终这个代码过程。
03:02
那下面我们来看一下它的步骤怎么做。首先我们看一下啊,就是里边的第一步操作,咱们肯定是先创建这么一个A的这个对象。这是里边的第一步,创建这个就是异步文件通道的对象,然后创建之后第二部分咱创建这么一个就是buff。把这个做创建,然后这个创建之后第三步,那我们就是调用咱们这个file channel。里边的这个锐的方法,然后最终得到咱们说那个就是feature这个对象。把这个得到,而我们调这个瑞的方法的时候呢,里边可以传这么两参数,我们看一下啊,就是第一个参数应该传的是我们这个buff,第二个传一个它那个就是进行操作那个位置,所以咱们里边的第三步做这个事情,然后这个做完之后,第四步咱们这里边呢,因为我们现在要做这个操作,所以第四步呢,咱们做一个判断。
04:07
判断一下,就是这个future里边它是否已经完成,就是不是已经完成这个操作完成的话呢,里边一个方法叫这个意思,Done方法进行这么一个判断,如果说它返回值。是一个处。那就表示完成了,如果它返回false,那就是没有完成,这是我们的第四步,然后这个说完之后最后一步,那咱们就进行这个读取,就是它的值如果说变成处,那最后咱们就是读取数据到咱的buffer里面去,所以这是我们要完成代码的一个基本过程,把过程给各位来写出来了,然后下面呢,我们就按照过程来编写一下最终这个代码。首先我们先来完成代码中的第一步,咱通过这个A的file channel里边的open方法来创建这个对象open方法中的第一个参数。
05:06
咱们传入这么一个pass。然后通过这个就是pass里边这个get方法,咱们给他加上咱的路径啊,比如说我加到这里at硅谷里边这个。002.t,把这个给他加上。然后加上之后,咱们把参数给它传进去,第一个就是我们这个pass,然后第二个加上你要进行的操作,我们用这个就是stand open option里边这个常量值,就咱们加上一个read表示对里边要做一个读的操作,最终它返回到就是我们这个对象,咱们起名就叫fair channel,所以现在第一步咱就把这个对象完成创建。然后这里边有异常,我把异常给它直接出去啊,所以第一步咱就完成了,创建一个就是异步的文件通到对象,然后创建之后我们进入到第二步操作,第二步呢,那我们就创建这么一个buffer,然后把这个咱们快速写出来。
06:14
首先我加上一个be。Buffer我们起名就叫buffer,等于BAT buffer点上aocate,咱们加上一个1024,这样的话把buffer完成了,完成之后咱的第三步操作,调用咱们这个file拆到里边的read的方法,得到咱的future对象,然后在里边我们传两个参数,第一个是你的buff,第二个是你读的那个位置,那我们就想一个零,从第零位置开始读取。然后最终它返回的就是一个future这么一个对象。所以现在咱们把这个就完成了,比如我起名就叫这个future。这是第三步完成了,完成之后呢,咱们里边的第四步操作,咱们要做一个判断,因为现在呢,我们要判断我的操作是否已经完成,所以里边我来判断一下啊,我加上这么一个Y。
07:13
然后在里面判断啊,如果说这个future。点上stone,它的值如果不等于处,那表示没有完成。咱们这里边写上了这么一个判断。然后这个写完之后呢,我们进入到第五步,如果这个值等于处,那咱就读取数据到咱的buffer里面去,那我最终来读取一下啊,我们用buffer先做一个这个flip,做它的模式转换,或者给它切换成一个等于零,然后这个选完之后,下面咱们来做这么一个读取过程,那咱就来上这么一个while。然后while里边呢,我加上就这个buffer,点上这个remain,如果它大于零表示里边有数据,有数据的话,那我们通过这个就是buff份点get方法把它值取出来,然后最终把这八份再加上这么一个就是。
08:11
克列尔啊,给他清除一下。好,各位看啊,这样的话呢,我们这段代码咱们就完成了通过future里边的read方法实现了异步这个channel里面这个读的这个过程,所以咱们完成这个代码,那下面呢,咱们把这个代码执行一下,我们看一下它的效果是怎么样的,那我们这里边执行一下啊,咱看效果。然后咱们看一下啊,这里边是有内容的输出,包括咱们看一下我们的文件中是不是有这个值,但这个值大家注意一下啊,它的值呢,并不是把咱们文件中的值直接输出,而是做这么一个是不是输出它那个unode这个值,比如说各位注意,97对应的是不是就是A啊,他把这个值输出了,比如现在呢,我想把它呢,就作这个字符串做输出,所以这个代码咱需要给它稍微改进一下,也就是这段地方咱需要改一下,但是现在内容其实已经输出来了。
09:15
这里边我们来写一下啊,咱们通过这么一个字节数组的形式,把它作为字符串,我们就输出,比如咱们就是U上这么一个BAT。里边我们就加这个八点上这个利米特啊,就是它这个大小。然后加上之后,咱们通过这个B法。点上get方法里边加上咱们这个data,然后加上之后,最后呢,我们把它就是做这么一个输出,那我们来输出一下啊。上一个坠。里边加上这个date。所以这样的话,我们现在就可以以字符串的形式把它就输出了。
10:02
然后最后我们执行一下,看一下最终的效果。各位来看啊,现在这个文件中的内容是不是就输出来了,所以我们现在就完成了我们这个通过异步文件通道读取文件数据的里边的第一种方式,通过filter里边的read方法,我们做了一个实现。
我来说两句