00:01
有问题吧,这两种是吧,啊三是三呢,刚才我就有一个写错了吧,刚才我就二完了就四了是吧,对吧,其实我会数啊,我就是写错了,你们懂的错,第一种还是有分方向啊一种,那他只能说获取对应的呀,对吧,它也是获取对应的啊好了,那么这样的话,我们是就要来试一试啊对吧,我们就获取通告,那么我们接下来就可以干嘛了呢?那我们说原来我们针对流是不是就能完成文件的复制啊,现在我或者说通道也是用数据传输的,那接下来我们就可以用通道是完成一个文件的复制啊,那接下来我说第一个要利用利用叫做通道完成文件的复制,那就过来试一试TEST1对吧,Controlt or导一下包,然后来个file input stream,另外一个file input stream对吧,这里来个叫做1.gpg,是不是来个图片。
01:02
啊,然后file呢,Output stream,用一个file output stream,然后复制成2.jpg对吧?我们说这个方法是不是针对知识通道的这些类是不是都提供了概的参与的方法呀,对吧?那么接下来呢,我们就可以获取通道对吧?所一获取通道对吧?怎么获取通过f Fi的一个方法叫做get channel,对吧?Get channel它会给我返回一个file channel,比如说来个in channel是不搞定,这样的话你T说shift o导一下头是不是获取通道了,当然他们获取通道是不是都是对应的呀,叫final China,那相应的下一个是不是就获取output呀,Out China等于fos点上get channel,这是获取到两通道,那么接下来我们是不是开始完成数据的传输了,是传输了,对吧?但是我们说通道自己能传输。
02:02
数距吗?我们说通道它必须配合谁使用啊缓冲区,因此第二步我们是不是得先分配个缓冲区啊对吧,分配一个指定大小大小的缓冲区域对吧?然后来看这BAT8分,八分等于BAT8UFF分点aocate对吧对吧,这是不是叫非直接缓冲区啊对吧,分配了个缓冲区,那么接下来我们是不是可以进行操作了呀?对吧,叫做开始读写数据吧,对吧,那我说可以先读对吧,叫做读取,读取或者说将通道中的数据存入缓冲区中对吧,相应的再将缓冲区中的数据是不是写入通道啊对吧,那么四说四是吧,将叫做缓冲区中的数据在写入通道,那相应的通道是不是就连接着你目标地点和连接呢?
03:02
啊对吧,写出道对吧,一个一个来先说读。读的话呢,我们是不是得循环读啊,对吧,那就循环读,循环读读怎么读呢?注意缓冲区叫做e channel,它给我们提供了一个方法叫做read,你是不是可以操作缓冲区啊,直接把它读到缓冲区中去,如果不等于负一说明啥?这不读对了,这个对应数就一样了呀,对吧?所以把通道中对应的这个数据说白了是不是就1.gpg对吧?这中的数据读到八分是不是放到缓冲区中去啊?接下来我说把缓冲区中的数据写到通道中,对吧,对吧?接下来我们说边读边写,那么写之后我们说现在缓冲区的位置要不要调一下。我现在是不是要写了是吧?把缓冲书都说明数书写过去啊,那这个时候我们是不是要调一下啊,对吧,那就是用八分点叫f flip吧,对吧,对吧,将缓冲区中的数据是不是写过去啊,那你说白了,那你得把缓冲区切换成读数据模式吧,哎,别忘混了啊,那这个时候叫做切换成读取数据的模式,是不读数据模式对吧对吧,来flip一下,然后呢,这样的话你就可以通过out China点上right把八分写过去了,对吧?然后不要忘了你八分你下一次是不是再往里写是循环呢?是不是再往缓冲去中写啊,然后再往缓冲去中写啊对不对,对吧?那这样的话你可定叫做清空,清空缓冲区,清空完了之后,然后你再再接着往这缓冲区中写数据,写完之后。
04:50
再切换成读模式,然后再把缓冲区中的写到通道中去,然后缓冲区再进工反复的这样操作,这个问题吧,完事了,那这样的说话是不是就完事了,完事了,注意通道要关闭,听了吧,叫out china.close然后in china.close注意硫啊,它也没给我们明确的指示关不关,所以说我们把它关掉对吧,都关掉搞定不搞定这搞定了,那接下来我就踹开,踹跟原来留的踹开的方式是不是一模一样,注意我就踹一次,告诉大家跟留的一样的,所以说就踹一次,一会我就throw,大家还能看得清楚点,听懂了吧,那这样的话,我右键throw位置来个try catch,它呢,出始为now,再初始为no,他也初始为no,他也初为no,多余的删掉,这是不还是一个个判断呢?叫做if,如果out China不等于。
05:50
No,那就关out China try开一下,然后呢,再来叫做if对吧,In China要是不等于no,那是不是in China也得关啊,再关in China,然后呢,再去if对吧,FX是不等于,那那是不是在关这个呀。
06:16
好像有点麻烦的哈,没有那么多了,只有更少对吧?只有更少,我们以后获取通道是1.7以后获取通道其实这种方式可能变少了吧,这也就是对原来的一个知识,以后获取通道就没有必要去创建礼物了吧,对吧,说否定对吧,搞定一复制乘二,那这个时候我是不是得搞个一啊,我的课进1.gpg,然后过来CTRLV是不是是那这个时候把一复值乘二右键运行,绿的绿的过来F5刷新一下2.gbg打开是不是不是可以啊,右回小心滚了一下鼠表,注意看大小啊,这个这个二,这是我复制的吗?对吧,叫291017对吧,实际上这个大小你们已经认识了,29107没什么吧,哎,那这就是利用通道完成了一个稳。
07:16
键的复制好像跟之前没差别多少,哎,是几乎一样了,对,但是方式就不一样对吧?方式不一样,你用了通道你也没有必要加缓冲了吧,我们现在就可以干嘛呢?现在这是不是叫做直接不非非直接缓冲区啊,那相应的我们能还能干啥,就来直接缓冲区啊对吧?我们说直接缓冲区再来一个文件的复制对吧?说使用叫做使用叫做直接缓冲局完成文件的复制对吧?完成文件的复制对吧?这次呢,我们采用叫做内存映射,映射文件的方式。
08:03
看到有说什么叫做内存映射文件,咱们过来试一试就知道了,Test啊,对吧,我这个123的,这是不是有一二啊对吧?大来按顺序看就可以了啊,那这个朋有我们说六这个直接换成区域的方式完成文件的复制吧,对吧,叫用内测内存映射文件的方式,对吧?那我们说看看什么情况,那这一次我们用GP1.7的NN2的open是获取通道吧,没有必要获取流了吧,对吧,我们试试怎么来啊,叫做通过各个通道,也就是fair channel有一个叫做啊open方法,第一个,那这里边是不是需要两参数啊,第一个叫做pass,是不叫路径的,这个是这个1.7以后给我们只提供的一个什不这啊,它就是代表一个文件路径,然后后边呢叫做option,就是你针对这个文件,这个文件想做一些什么样的操作,这1.7提供的啊,一会回头呢。
09:04
我会对这些方法详细的讲,它是不是代表一个文件呢,路径呢,对吧,然后其其中呢,它有一个工具类叫做pass是不是X啊,Pass有一个get方法在下边这个你就可以传它表示的那个路径了,并且它表示的路径可以用拼串的方式,注意看这个get后边是可变参数点get是不是首先一个first street,然后后边是不是可变参数啊,你可以拼,比如说你一盘一个字符串完了,这个hello一个字符串过短一个一个路径是吧,就是比如说类似于这样的,那比比如说来个叫做嗯E双引号是不是E盘下逗号什么n nio下呀,然后呢,在这个逗号,你说可拼多少都行,对吧,如果有这种需要你就拼,没有需要,你是不是直接往当前项目地下1.gg就完事了啊,有需要你就拼,没需要是不可以不用拼对吧,然后后边这个是什么呢?他说要需要就叫做open。
10:04
Open ocean呢,这也是个可变参数啊,对吧,说open ocean呢,它有一个支持它的类叫做standard standard open option,注意standard open open这是一个什么东西,E代表啥,还记得吗?是么一句啊,对吧?意代表枚句,然后start open open这里边会有一些比如说叫做read,是不是叫读某事啊,那有read呢,就有right是不要写模式啊对吧?那么相应的现在我这个title是不用于读的呀,那就先给他来个读模式,它会给我返回一个file channel叫做in channel,那时不就得得到了这个channel啊,然后现在有异常,这次的异常我就给它Rose了,可以吧,但是你们得TRY开,是不是跟原来一样啊,也得保证它关闭啊,对吧,那这样的话就获取了通道。
11:04
那么相应的我说要文件完成文件的复制对吧?所以说我还得来一个对吧,叫叫a channel等于叫file channel第点上是不是叫open呢?然后pass词点上get复制成二点解辑记对吧,后边不用拼音是不是就不写呀,然后这一次是不是叫写啊,来个叫standard open open点上是不是right模式啊,注意它是可变参数啊,我还可以接着在后边继续指定,叫做standard send standard open ocean点上叫做correct,注意这里是不是有俩呀,先说下面这个,下面这个create new指的是如果你的二点进不进,不存在它就创建,如果存在就报错,听懂吧,说如果不存在求就去创建呢,如果存在时候告诉你已经存在了。
12:04
对话错,那么上面呢,这个create呢,它叫做如果文件不存在它就创建,如果文件存在它也创建啊,就是创建是不覆盖啊对吧,存在就覆盖,不存在时就创建呢,那咱们咱先用谬吧,可以吧,先可用是不是叫做呃存在就报错了,不存在就创建吗?对吧?这两个式,那么接下来我拿那么这俩以后实际上就跟下面这个是不就一样了呀,对吧,要是正常操作的话,是不是就跟这就一样啊,但是注意咱们现在是不是想用这种方式啊,内存映射文件,我想直接把缓冲区建哪去,是建物理内存中去啊对吧,当然现在呢,我们说写的这种方式跟你刚才说那个叫做aocate direct是不是一模一样,但是现在呢,换一种方式,而通过in China是不是这个通道啊,它有一个叫做map方法,听懂吧map方法,Map方法呢,其中有这。
13:04
看几个选项,第一个什么叫做map mode呀,说你这个map的模式嘛,对吧,那就map mode,它有一个叫做你看有read only,这是不是叫读只读模式吧,读多少呢?从零读in china.size说这个China多大我就读多少,听懂了吗?它会给我返回什么呢?返回一个叫做的map buffer,这个叫做嗯,In map8uffer吧,是不是给我得到一个叫做map的8UFFER啊,说它是什么东西呢?它就是我们所说的内存映射文件,它的道理跟我们之前说那个read,呃,不是aoced direct一模一样,听懂了道理是一模一样,只不过说获取方式不一样而已,原理是不是一模一样啊?
14:04
对吧,就是获取的方式不一样,那也就是意味着现在这个缓冲区在哪呢?从物理内存中大对吧,现在的缓冲区就在物理内存中,道理跟原来的一样,就是就是这个获取的方式不一样了而已,然后还要再说一个,补充一个什么呢?就是这个内存用存文件,也就是直接缓冲区的方式,只有BAT buffer支持。只有bit buffer是不是字节呀,对吧,只有bit buff支持啊,其他的不支持啊,那这样的话呢,我有一个E,那相当的我要是复制,我是不是再来个out呀,因为你毕竟是复制了,对吧,那我说再来一个叫做out China点上map,那这次的模式上面那是读,这次呢就是make mode点是write呀,但是呢,它只有叫做read right,它是叫做读写模式,那这叫读写,然后呢,从零到你in还是你in China能有多大,我是不是叫操作多大呀,对吧?In inside它也会给我返回一个叫做map或bit after对吧,叫做at map的是不就得到了两个内存性射键呢,都在物理磁盘中。
15:25
对吧,物理内存中啊,物理内存中是不是都在物理内存中啊,那么接下来注意这种方式相较于原来它有什么好呢?注意听啊,原来你是不得通过通道去读,通过通道去写啊,现在这种缓冲区不用,为啥呢?因为这种缓存区数直接在内存中了,我现在往反缓冲区中放数据是不是就直接放到物理内存中去了,就相当于那就直接放到文件中了,你还用通道完全传输啊,就不用了,我现在只需要直接往缓冲区中放就可以了,直接从缓冲区中取,直接往缓冲区中放就可以了,你是不是都不需要通道正能听懂吗?所以说相较于原来你用通道去读写这一步就可以省了,我现在直接操作缓冲区是不是对吧?说对直接叫做直接,对,叫做缓冲区,对进行数据的读。
16:25
读读写操作,那首先数据输出在in map的八分中呢,对吧,我是先从这个里头这个in map的buff分中取出来,放到out map的buff分中去就完事了嘛,对吧?那怎么来,那读取数据叫in map的buff分点是不是get呀?它这里需要一个be叫做DSD的new be这里来个一零,叫做这么in map的8UFF分点limit可以吧,对吧?然后呢,都给它读到这个是不速容句啊,紧接着我out map的8UFF分八分点上是不是叫put呀,直接把dst put过去完事,你不需要通过通道去读起来,直接放缓冲区中,是不是就相当于直接放哪去了,是不是就放到是不是放到这了,放到这到时候它是不是自己就行了,对吧,完事,那接下来是不是通道关呢,叫做意。
17:25
channel.close然后out channel.close是完善对吧,那这是二,嗯,那这次我来个三,刚才是不是没有三呢?没有三,后来我试一试右键运行,嗯,那注意这里是个什么问题呢?叫做不能读,什么意思?注意现在我获取的这个这个内存用测文件是不是叫做读写模式,你out参它只质是什么模式,是不是只接接写呀,有读吗?是没读啊,所以说那你通过这个通道获取的它是不是也不支持读,但是我现在是不是只能支持读写模式,为了解决这个问题怎么办?给谁消毒说给out China啊,说给它加个read是不是可读某式啊,对吧?也来个叫做standard的点点说给它加读。
18:25
不是啊,对吧,因为你通过这个通道获取的映射文件叫读写,你现在这个通道只是写不够听到吧,那这回再来啊,这回再来的话,注意我三刚才是不是有了啊,F5说删有了呀,我得把它删了,不删会什么呢?我这个呃,我是说可瑞谬啊,对吧,我们试一下右键运行是不算说不键存在对吧?所以说那这个时候你想解决这个问题,你把这个谬是不去掉也可以啊,对吧,那这个时候再过来又接直行是不绿了,绿了之后过来F5刷新一下三是不是也要对吧?没有,那看看大小右键。
19:08
是不是291017啊,对吧,那这就是用叫做直接缓冲区,也就是内存映射文件的方式完成了一个文件的复制。那么接下来大家想做一件什么事,我们不是说这种快吗?对吧,我们是不是该试试啊,说到底快不快呀,对吧?那么我们就试一下对吧,搞个一个多G的电影是不是可以了片对吧?那这个时候我们是不是记录一下时间呢?对吧?那记录时间我们原来是那C这么点看太minutes啊对吧,现在咱们不是马上讲一百八了吗?我这是不行,那我这还是1.7呢,那就算了对吧,回头可以给大家讲啊,讲1.8的时候再说吧,从second car and ten minutes啊得到一个long start,然后这时候呢,再来个long and six什么点can ten minutes sit out所耗费时间为加上的and减去start,对吧?下面这个是不是也来一遍啊?嗯,我来个copy吧,这是开。
20:21
这个是结束是结束了,对吧,那我这次复制个什么呢?我在这里呢,给大家准备了一个片儿,是不是这个呀,这个有一点是1.2个G呀,对吧,差不多差不多了吧,对吧,太大了也等不起,那么过来呢,我们试一试,先用这个吧,完成一个文件的复制,哎呀不对。我这里。D盘是看这呢,对吧,看这个大小。
21:00
拉不过去了,就这样吧,那这样的话呢。先来个一复制一下,哎,不对,没改呢,这个应该是叫做,呃,D盘下1.mkv,复制成D盘下2.mkv对吧,然后呢,右键运行。刷新是二有了呀,但是呢,这个大小呢,还是。对吧,F不呀,F5是F5呢,对吧,是以是实际上第一次呢也不能算,因为第一次呢,输出没有缓存呢,有点不公平对吧,你第一次操作这个文件,计算机底层它是没啥缓存的,它有点不公平,所以说第一次呢,咱们先别算,第一次我用的是普通的,看到吧,所以说不算是不是公平点啊,重来一次他有是不是给他覆盖掉啊,这回是不是计算机底层带缓存呢,要有缓存就让他们都从都用缓存去比才公平是吧,对吧,听你们啥意思嘛,但是这个是不是一零啊对吧,这次行,先这样一次,是不是一次也不算呢?对吧,当然得多来两次,再来一下,嗯,那可能今天我开了一天机,他也可能会有点影响,对吧,我的电脑也有点累,还真是一两。
22:32
对吧,那也没办法,这是不是可以了,对吧,差不多了,那这一次呢,我们说咱用内存映射文件的方式啊,对吧,那这个时候再来叫做一呃D盘下1.mkv复制成D盘下是吧,叫做2.mkv呀,对吧,大家一定要关注这个大小啊,我先把它删掉对吧。我先把它删掉,左边右边的程序完没完事,别管看后边右看左边这个大小,听懂了要对比,那这个时候呢,过来右键。
23:11
运行F5看看这头完了,这头实际上没完事,那头已经完事了吧,哎,这叫二幺,这叫二幺,但是呢,大家注意啊,我多来两次它会有问题的,注意啊,实际上这个都不算快的,那这样的话,我多来两次是有问题的啊,我这是再来一次执行,实际上这头已经完事了,1919是不一九啊,对吧,但是说已经快了呀,对吧,我再来啊,再来一次它是存在点问题的执行。注看这个再看看C出的六,刚才你们能看到这个360这个东西吗?没有没有就算了,今天怎么这么正常呢?再来一次啊,再来一次,再来一次,他有的时候吧,我们说我们那个垃圾回收机制,它不能及时运行的话,它有的时候一直占我资源,我这个程序完事不了。
24:09
注意看啊,右键运行F5F,哎呦哎呦哦,我按错了,我按到F4这可以啊,正常没有不正常的了,再来一次啊,执行F完事完看到我这头完事了,但这个是不没有能看到吗?是不是有有点啊,但这个也不明显,按理来说应我再来一次,最后一次行吗?但是反正它是不是算高了呀,对吧,右键运行F5这才完事,这有点不稳定呢,我想让大家看一个效果,看就有点不及时,你发现了吗?就这张文件已文件已经完事了,我这条程序说明完事了,然后CPU忽然一下标红。
25:09
这有点啊,对吧,对吧,我说这实际上现在CPU它已经它那个内存应该已经占用的挺高了。完了,我这电脑出不来了,卡住了,完了完了完了完了。完了完了零了已经三个多了,这个实际上已经用了,嗯,这样的话我再来一次吧,把它删掉,然后呢,这边呢,我来一个执行右键运行。实际上这时候此时已经完事了,F我我摁错了,我执行了吗?我卡住了,完事了,都完事了,我有点卡住了,全卡住了,行了,就是就是含义,我想表达的什么呢?就是左边和右边它有点不一致是吧,不是左边完事了,我程序就立马结束啊,并不是这样的,对吧?这次的效果还算是比较好,有的时候你这边已经就是他完事就是一瞬间,可能就是一秒多是不就完事啊,但是我这边呢,得是十秒钟我程序才结束,这都是有可能的。
26:45
听懂吧,这都有可能,有可能什么有可能我的垃圾回收机制就没有及时释放啊,这个时候你要是通过360去监测的话,它会那里提示你一个叫做GM系统卡硬盘这样一个提示。对吧,含义就是你GM是不是一直占用着资源呢?用着人家的物理内存的缓冲区的呀,还用着,也就是说我这条程序这头的这头的那个文件早都读完了,一秒完事,但是我这头程序并没有立即结束,差不多十秒弹出来听懂吧,但是不管怎么样,我写程序的这个写文件的这个速度是不是提升了,对吧?虽然程序它它操作没有反应的那么快,但是我这个文件操作速度升上去了,对吧?那最终得到的结论就是说什么呢?就是说呢,就是说这种直接或者叫做内存映射文件的这种方式,效率虽高,但是它并不是所有的时候都稳定。
27:43
是不是意思啊,就是说有的时候当我们把这个数据写到了这个这个内存映射文件中以后,那么这个时候是不是就不归我们程序管了呀,至于他什么时候把操作这个内存,什么时候把内存写到磁盘,那这就是人家操作系统的事,跟我们程序无关,那有的时候我们垃圾回收机制要是不及时释放这个,我们这头的是不是引用资源呢?那有的时候呢,我们的程序还停不了,你什么时候塞中的GC或者说是垃圾回收机制回收了它的话,我们是不是才彻底释放资源,对吧,才能彻底的,所以说它不是。
28:19
那么的稳定,所以说你要是选用的时候呢,他这里也跟你说了说,所以建议呢,将直接换身区主要分配给那些异兽基础系统的本机IO操作影响的大型的持久的缓冲区,还是你这个缓冲区,你希望它在物理内存中存放的时间长,对吧,你是不是可以选择这种啊,对吧,一般情况下最少最好仅在直接缓冲区域能在程序性能方面带来明显好处的时候呢,才分配它,也就是说你得有的时候你得经过测试到底哪种好就不才用了,对吧,不是所有的情况下都好。明白吧,对吧,但是不管怎么样,这种效率的提升咱们还是看到了比较明显,这没问题,白好吧,那么这个呢,就叫做叫做直接缓冲区完成文件的复制,对吧?那么实际上呢,这个就是为了演示在用al啊,我们想要完成文件的复制,完全没有必要这么复杂,那接下来咱们再往下再来一点,叫做什么呢?是是叫叫做通道之间的数据传输,对吧?我们说通道之间直接就可以完成一个数据传输了,对吧?需要两个方法,一个叫做transfer from对吧,另外一个叫做transfer to,是不是这两样,这两个方法我来试一试,For test3叫做通道之间的数据传输。
29:54
那么这个通道这种我直接copy过来了可以不对吧,获取通道是刚才说完了呀,有异常我暂时选抛出的方式,你们是不是得传开去啊,那这个时候呢,我们过来,呃,这个时候呢,我只需要通过in China是不是调用一个方法呀,对吧,叫做叫做transfer是不从哪来呀,从in China中来吧。
30:20
呃,不对,那我说反了,那in China的话,我就是从in China来的,我是不得叫做transfer to啊,从到哪去,从我in才从到哪去啊对吧,去哪去哪从第零的开始对吧,然后呢,我通道多大是不是就去多大呀,对吧,然后呢,去哪啊哎,是不是去out China啊对吧,那这个就可以了,叫transfer。嗯,点transfer to去哪从零到in china.size然后呢,到哪去到out China这去,我刚才不是这么写的吗?啊,我写size啊好吧,那这样的话,然后通道如何B啊in china.close对吧,然后呢,Out点漏是么事对吧,是不就一句啊,然后还是二还是二还是二就还是二了,我把二删掉。
31:30
说完事啊,对吧,右键运行。完事了,这头也完事了,这个用的也是啥呢,也是叫做直接缓冲区的方式,听了吧,Transfer to和transfer也是直接缓冲区的方式执行,F5完事,这头没完事。说这头完不完事,说完了呀,好吧,两边都完事了,是不道理都跟这成一样的对吧?这个也是用直接方程区的方式啊,这个叫做transfer to,那下面是不是还有transfer啊transfer那就是是at呀,点上transfer从in China这来了,然后从零到叫做in china.size这俩是不是有有的是不是是有两多,哎,是道理一模一样,对,就是一个是吐,一个是撞,好好像他有点有点让我们有点模糊的感觉,对吧,是风容易搞混呢,对吧,大家就知道从哪来到哪去,是不是完事啊对吧,别整混了啊,然后右键直行。
32:44
这个你看这就完事了,对吧,是不是也完事了呀,我删除一下重来吧,右键运行。F,刷新这是正常的,这头这都完事了对吧,行了,道理呢,跟之前呢都是一样,听懂了对吧?这就是通道之间的数据传输。
33:10
做完了对吧,这是文件复制,是不是不像原来那么麻烦了,直接从那transfer transfer to就能完成对吧?好了,那么这个是通道之间的数据传输,那么。
我来说两句