00:01
各位同学大家好,欢迎继续收看上硅谷Java n IO课程,下面呢,我们来学习NIO中的另外一个内容,叫做type管道。那管道什么意思呢?给各位先解释一下这个概念,我这里写到啊Java IO的管道是什么呢?它指的是两个线程之间进行单向的数据连接,就是两个线程之间,比如你看我这张图上有A有B,它们之间进行单向的数据连接,而这个派管道中呢,有两个通道,给各位来具体说一下。首先第一个通道呢,它叫做south,第二个叫think,而这两通道什么意思呢?也就是说数据首先被写到这个S通道里面去,然后从S通道中进行读取,所以这个过程就叫做PI管道,它指的是两个线声之间进行单向的数据连接,在过程中有两通道,一个做写,一个做读,所以这是关于管道的一个基本说明。
01:12
那下面呢,我们看一下管道中的具体操作该怎么去做,首先我们看第一个就是如何来创建一个管道,这个方式很简单,我们直接调type里边这个open方法就可以打开一个管道,这是第一个,然后第二个我们看一下如何向管道中写入内容。刚才提到。咱们写入用到一个通道是不是叫think,所以这里边我们定type里边的think方法,得到里边这个就是think这个通道,然后咱们通过buffer缓冲区调right方法,往里边可以写入数据,这是第二个,然后咱们再看第三个。第三个呢,是从管道中读数据,那怎么做呢?我们得到里面这个source,这个通道就用这个S方法得到,然后通过这个buffer用RA的方法往里边来读取这个数据,所以这是关于我们提到的管道操作的基本内容,那下面呢,咱就直接通过一段代码给各位来演示一下里面这个具体过程,那下面我们来写一下这个代码。
02:23
首先啊,我在这里边我先建个包,这个包我起名就叫这个type管道,然后在里边咱们来创建这么一个类,这个类我起个名字就叫做PA。DEMO。把它做创建,创建之后在里边我们写上一个问方法,然后完成咱们管道这个操作的过程,那下面给各位来写一下这个过程,首先我把这个步骤先写出来,然后咱们按照步骤来编写它的代码,那我写一下啊,首先里边的第一步。
03:00
咱是不是先获取到咱这个管道。然后获取之后第二步操作,咱们先获取里面那个S那个就是通道。把这个先得到,因为这个数据用于传输的,咱们把它得到,然后得到之后第三部分咱就是创建这么一个缓冲区。我们通过缓冲区来实现,这个就是写的操作,因为咱刚才提到啊,咱们写用这个S通道读用S,所以里边的第四步操作。写下啊,我们就是通过这个就是think这个通道,咱向里边来写入我们的这个数据,这是我们的前四步操作,然后这个做到之后,第五开始咱肯定要读嘛,那读的话,首先咱先创建或者说获取到里面那个SOS这个通道。
04:04
把这个线获取到。然后获取之后,咱们也是啊,创建缓冲区,通过缓冲区,然后来做这个就是读的这个过程,也是第六部分写一下啊创建一个。缓冲区。然后调方法做这个读取数据的这个过程,包括最后啊,咱们把这个通道给它,最终做一个关闭。所以各位看啊,这就是我们用这个派管道代码的一个基本流程,给大家写了一个操作的步骤,那下面呢,我们就按照这个步骤把代码我们来快速实现一下啊,首先第一步我们就是获取管道。用type里边的这个方法。咱们叫open方法来得到咱这个管道,那我起名就叫做type,这是里边的第一步操作。
05:04
然后这里边有异常,咱们把它直接就是出去第一步完成,第二步呢,获取里面这个think那个通道,那咱用这个type里面这个叫think方法,把这个think这个通道给它得到,咱们给它起个名字,就要这个think channel,这是我们的第二部分,然后第三部分咱们建一个缓冲区。那我们来创建啊。我叫这个buffer。然后咱们用这个allow的方法,比如写一个1024,建一个缓冲区,然后建完之后我向里边,比如给它放一些内容,咱们用这个put方法放下啊,比如我就放一个at硅谷。换成这个字节的数组的这种形式,这样的话往里面放内容,放完内容之后,下面咱做了这么一个,就是模式的一个转换,用这个叫浮力方法,这样的话我们把缓冲区部分就完成了,完成之后呢,咱们向这个里边来写入我们的数据,就通过这个叫信。
06:12
China里边这个write方法,通过缓冲区做一个写入操作,所以大家注意啊,咱们前四步之后,这个写的过程就完成了,通过里边这个think通道进行实现,然后这个做到之后,咱做第五步来读这过程。那咱用pink就是PI里边这方法叫这个S方法,得到里边这个S这个通道啊,就是为了做这个读的过程,然后得到之后,下面的咱们也是创建这么一个缓冲区,然后把这个拿过来,咱给他改一下啊。比如说我改个名字,咱叫这个就是B2。然后这个选完之后,下面同样啊,咱们就是写下啊。我用这个就是B2点上这个flip做一个模式的转换,然后这个做到之后,咱们调这个里边这个就是read方法来做这么一个读的这么一过程,我们调read,然后加上这个。
07:19
八伏二最终会返回它那个就是。大小或者它那个数量啊,比如咱们叫Les。然后这个反应之后,最后咱就把它的值我们做个输出,为了一会儿能看到里面这个效果啊,那我们就直接扭上这么一个。四椎啊,直接扭一下。然后捏完之后里边用这个BE82。点上这个瑞啊,然后咱们从这个零开始读到它这个Les,这样的话把这值我们做了输出,然后输入之后,最后呢,把两个通道给它关掉,第一个咱先关这个south channel,点上close,然后第二个是这个sing channel,点上close,所以大家看啊,目前咱就把这个管道的过程就现出来了,通过这个think通道进行写的过程,通过so通道进行读的过程,这是我们完成这段基本代码。
08:18
然后完成之后,下面再来执行一下,看一下里边的最终结果,我们来执行一下啊,然后各位看里边就是最终它里边这个效果。好,我们执行之后呢,咱发现啊没有内容输出,那我们检查一下啊,看代码中哪里写的不对,那我们检查一下啊,首先前面是咱们往里边写的过程,通过缓冲区往里面写,后面是咱们读的过程啊,各位看到啊,因为咱们现在我这里边是不是又建了一个新的缓冲区,这里边应该没那个内容啊,所以咱们把这给它改一下啊,还是用之前那个缓冲区来读取咱的数据。呃,这个代码我给它给它注掉啊,因为这是我们写的,有一个小问题,咱改成还是之前那个be buffer。
09:05
给它改回来啊。包括这里边就是转换模式,然后读,最终把内容咱们做个输出,然后现在咱们把代码我们再来执行一下啊,刚才是缓冲区的位置有点小问题,然后咱们看最终这个at硅谷是不是输出来了,就是咱们往里边写的这个内容,咱最终通过管道把它是不是也读出来了,所以这是我们完成里边的这个代码,各位把这个知道啊,然后最终总结一下啊,管道什么意思呢?它指的是两个线程之间做单向的注意连接。在管道中有两通道,一个so,一个think so用于就是读,Think用于往里边写,然后这个过程中实现了我们里边这个相关的操作,所以各位把管道给它知道,这也是NI中一个重要的内容,叫做管道。
我来说两句