00:00
这块说了一个异步文件写入,说了一个简单文件写入啊,还有一个同步文件写入,说了三种了,对吧,然后还有一种叫什么呢?叫做一个流式文件写入。不用叫做一个流式文件型,那什么叫流式文件解读,那现在其实无论是我们文件的读取还有写入,其实就像什么,我们计算机里边一个文件,我是不是要把这文件给读出来呀,要这文件给读出来,那注意或者说我要把一个东西,把我程序里边的东西是不是写入到一个这个文件里啊,其实它就像一个什么呢?形象一点比喻就像我们从一个鱼池里往另一个鱼池里干嘛呢?输哎送水,我这有一个大的这个鱼池,这儿还有一个鱼池干嘛呢?我要从这个池子不一定是鱼池是吧?水池子啊,水池子,这个水池子是空的,这水池有水,我是不是想把这个水给它输送到另一个池子里啊,这就是一个文件的写入,能这意思吗?那实际上现在我是不是想把我程序员内容是不是写到一个文件里啊,就相当于在送水,而我们现在这种无论是同步啊,异步啊,还是简单文件写入,它都有一个。
01:12
问题什么问题呢?他是一次性的将一个内容是不是写到了一个文件里啊,就写一次,一次是不是全都给他写进去啊,那这样就会有一个问题,什么问题,我在写之前,我必须得把所有我要写的内容全都给干嘛呀,全都给准备好,然后一次性的干嘛呀写进去,那这样有什么问题。有什么问题,如果文件过大的话,会导致我们如果文件过大的话,内容过多的话会导致什么呀,是不是占用我们内存过多呀,因为我要一次性全写进去,我就意味着假如说我要写100兆的东西,我就得把这100兆的东西先在我内存当中预备好了,换句话说,其实就是保存到一个八字里,然后干嘛?然后再一次性的写入文件,懂吗?哎,那这有什么问题啊?
02:07
哎,占内存太大了,对我们性能损耗干嘛呀,很大,什么意思呀,看着我这儿有一个水缸,这儿有另一个水缸,我希望现在干嘛呢,把这个水缸的水一次性全都倒到这水缸里怎么办?注意了,这水缸里有一吨水。有一吨水。现在我们相信什么?我们相当于把这一吨水全都抱起来,然后干嘛呢,抱到那个水缸那儿,再把这水干嘛呀,抱出去有什么,有没有什么隐患,第一个假设你能爆起来,是不是速度也会很慢呀,这是第一个问题,第二个问题,有可能你抱不起来,你就让绳给给砸死了,对吧?哎,更可能是绕起来,所以所以我们如果说一下全都加在内存中,第一个可能干嘛速度过慢,第二一个问题,内存太小。
03:01
这水缸里的这个文件太大,导致我们内存干嘛呀,溢出啊,内存溢出,所以无论同步还是异步写入,还是简单文件写入,它都不适合什么呀,大文件,哎,我们说了同步异步还有什么呢?还有我们这些简单文件的这个写入都什么呢?哎,都不适合我们这个大文件的写入,诶大文件写入主要这么几个问题,什么问题啊,第一个我们说容易,就是说第一个叫做性能比较性能较差,还有什么呢?容易导致我们这个内存溢出啊,容易导致我这个内存溢出,这是我们说它给我们带来的一个问题,能懂意思吧。那怎么办?我们叫解决问题怎么办?先解决水缸的问题。大水缸。小水缸,或者说就两个大水缸吧,我要把这个水从这个水缸里,水缸移到什么呢?移到B水缸里。
04:03
怎么办怎么办,诶我一想我这插一根管到这头,我这一作等等是不是全都流出来了,哎给鱼缸换过水了,哎一嘬咔全都流过来了,那这样你说我还用不用搬了,不用搬了,水管只要在这是不是这水房里,它流流流干了呀,哎对流干了,而且速度是不是还会很快呀,哎很快我就不用搬了啊那所以我们这块,而且它还有什么特点,它是不是可以持续写入啊,可以持续引入,而我们简单呀,同步这些文件写入只是什么呀,写一次,一次只能写一个东西,而我们这个插上水管子以后干嘛呀。可以持续的写啊,可以持续写,那我们说了,我们这里边有没有这水管的,有,那就是我们所谓的什么呀,流式文件写作啊,流式文件写入好,我们来看一下,直接写代码,直接挖一个FS,等于一个这个require,一个FS,先引入FS模块,那这块我们要用的是一个流式文件写入,我们说流式文件的操作就相当于是在什么在文件上给它通了一个水管,我们可以把我们要写入的内容通过这个水管干嘛呀往那个文件里去输送,这样的特点就是只要水管还在,你可以干嘛一直写,而且它还不是一次写很多,一次写一点,一次写一点也不会导致我们的内存干嘛呀溢出,不会对我们系统的性能造成很大的这个压力,所以这是我们流式写入一个特点,那我们现在来看,我要想进行流失写入,我应该先干嘛?
05:42
是不是先找到那根水管啊,所以我们这需要先创建一个流,哎,我们这需要创建一个流,那我们这要创建什么呢?叫做一个可写流,因为我们是要往文件里去写的吧,哎,写的,所以我要创建一个可写流,怎么创建在这块文档里看一个方法,我们叫什么呢?叫做FS,点一个C和read,诶两个你看。
06:09
诶,这就是我们的两根水果,上边叫做red stream,这是什么呀?可毒瘤诶下边叫做right stream叫做可写流,我们要的谁呀?可写流啊,可血流在这CTRLC,我们这来复制一下FS,点一个create,一个right string,该方法可以干嘛呢?它可以用来创建一个可写流,可写流那这参数呢,参数就更简单了,Pass什么呀,是不是我们这个路径啊,哎,文件的一个路径,说白了你要跟哪个文件接通对吧?要跟哪个文件连接上啊连接上然后下边一个我们叫做一个options option是什么呀?这是我们这个配置的一个参数,这个跟我们上边那是一样的,一般都可以省略不写啊,省略不写好直接来整了,这来一个哇,一个这个什么呢?哇,一个这个诶我叫一个打。
07:10
6s right strip strip等于什么呢?FS点一个create一个right strip,然后在这我传一个路径,路径是谁呢?我来一个hello3.tit所便写这么一个,那现在表示什么?我现在这个red stream就已经和这个hello3.t干嘛了,已经接上了,换句话说这个水水管子已经插进去了,能理解吗?哎,我这一运行,咱们来看效果走你这哈三是不是已经出来了,水管子已经接上了,接上以后干嘛?哎,我是不是可以往里去写内容啊,哎,往里去写内容直接来我们来通过这个WS来向我们这个文件中干嘛呢?哎,输出这个内容啊,输出内容而写WS有一个方法叫做什么呀,叫做一个RA,就叫一个RARA什么意思呀,写它里边需要传一个字符串作为参数,来这写一个,这是我们通过这个可写流。
08:11
可写流,诶写入文件的一个内容,然后一保存,看着我这一运行走,你打开文件。是不是写进去了,那它有什么特点呀,是不是说只能写一次呀,哎不是,只要文件这个流还在,你可以干嘛呀,一直写下去,我这是不是写了五次了,哎直接运行来走你。看到了吧,哎,一直都写下去了,哎,所以只要这个轮存在,你想写多少你就写多少啊你写多少好这看懂了吧,它可以持续可以分多次把一个内容写到这个什么呀文件里,那这样所比较适合我们这种什么呀,大型文件,文件比较大的时候,适合用我们这个流式文件写啊流式文件好那再来看了,那这块有什么问题啊。
09:03
那首先这水管子一接上,我是不是压根儿就没关呀,你这东西如果说我们是在服务器里的话,是不是会也会对我们性能产生影响啊,所以这块我需要把这个流给它关,关之前我们还要说一个问题,那现在这个流其实一般情况下我们需要有一个事情,我需要知道这个流的打开还有什么呀,关闭,我需要能知道这个流有没有打开,或者有没有关闭,那我们要说怎么去监听这个流打开还有关闭,怎么监听呢?那这里边我们这来说一下,我们在这写吧,哎,我可以通过什么呢?通过监听我们这个什么呢?哎,这个流的这个什么呢,叫做open和这个close。C close事件来干嘛呢?来监听我们这个流的一个打开和关闭啊关闭,那下边就来说了,怎么监听啊。
10:08
怎么监听啊,哎,我们这块WS我需要给他绑定一个什么呀,绑定一个这个open事件,这open事件我们要怎么去报,怎么去帮,其实这个。怎么绑?哎,我们有一个什么呀?有一个on这个函数,On这函数有印象吗?哎,On这函数我们GS里没有,但哪有这块里边是不是有啊,哎块有啊,通过on可以给我们一个对象绑定一个事件,比如说我这绑定一个open事件,然后这来一个function,这个函数什么时候出发,当open事件发生的时候,函数时候出发呀,哎,我这来一个cancel.log一个,这来一个什么呢?哎,流打开了,流炸开了,然后这一保存,然后咱们运行走,你是不是就能见掉流炸开了,哎流打开了,那这块注意了,Open事件会触发几次,只会触发一次,因为我这流是不是只会开一次呀,只开一次,但是我用on绑定会带来一个问题,即使事件触发完了,这函数是不是依然在啊,但是其实有没有用了,没用了,所以实际上open这个事件是个什么一次性的。
11:24
之间,我有必要用没有,要用什么?是不是我们有一个once啊,哎,On和S都可以绑定事件,On是绑定什么?是绑定一个长期有效的事件,而one是绑定一个什么呀,一次性的事件运行效果是一样的,但是实际上这个性能要好一些啊,好一些,然后还有一个事件,Vans还记得吗?啊,没讲过,确定没讲过,我们看看啊。
12:02
这块RY事件,呃,它这叫什么呀,叫万看到了吗?万它和这个one是一样的,就是什么呀,一个一次性的时间,这叫什么呀?啊哎,这是万,它没有那个万是吧?万但是是一个意思,这这这知道吗?这也不知道吗。没讲过不可能吧,盎讲过这个万没讲过是吗?好,那我们说一下是吧,这东西也没啥可说的,直接看一眼就完事了,我们来写个注释。确定没讲过是吧?好来我找去啊来这是我们说一个这个昂on什么作用,On可以可以为我们对象绑定一个什么呀,绑定一个事件就是事件,它需要两个参数,第一个是事件字符串,第二一个是我们回调函数,这个比较简单,不说了,而我们这个ones什么特点呢?Ones就相当于是我们解块里边那个万啊,那个one,那这块我们来说它也是事件字符串,然后这是一个回调函数,那它什么作用,它是干嘛呢?它可以为我们这个对象绑定一个一次性的事件,什么意思,该事件。
13:22
将会在触发一次以后自动失效啊,自动失效就是您风险就说这个事件只能触发一次,不会触发什么呀,多次啊,不会触发第二次,那我们这个东西测不出来,因为它本身就触发一次,能懂吗?所以我这块白错了,它本身就触发一次,如果你用on这块太浪费了,因为你触发一次以后事件还在,但是这个事件已经不可能在发生了,能理解吧,所以在这我们应该用一个once,哎,Open表示打开,我再来一个什么呢?来一个close close表示什么呀,关闭啊,这来一个流关闭了,那我问你我这流关没关,哎,我这运行是不是没关呀,所以这个时间出没出发呀,没触发,那我怎么关闭这个流。
14:16
那这块啊,我要换一下,我这块区分一下啊,我这写一个,我不能写一个内容了,我换一个啊,哎,我这写一个,今天天气真不错,然后呢,我们再写一个,除了日照,哎,然后再写一个这个红掌拨清波。红掌拨清波啊,然后拨轻轻的,哎,然后这是青青真片。哎,好,随便写一个啊,在这写一个,这感觉像个银诗是吧,就不管它了是吧,不管它了啊,那这块咱们往下写啊,那我现在是不是需要去关闭这个流啊,哎,关闭流,关闭流你猜猜叫啥呀?哎,Close ws点一个close,我们看个热闹是吧,咱们看看能不能关直接运行走,你看留打开留关闭是不是完事了,来看我们文件。
15:14
哟,又出现幻觉了吗?来,关上我再给他删了啊。这回就不是幻觉了。来我再运行一下啊,走你出来了对吧,一打开。你发现什么,这只写了第一个吧,第二个是不是都没写呀?诶我要不关啊,我要不关,我这一保存直接运行走,你是不是写全了,哎写全了,如果我关了,诶只写过去一个,这是为什么,这是为什么?诶注意我这close就相当于什么,我们刚才说了,我们这个流是相当于从一个水池或者从一个水缸是往另一个水池去送水呀,那这时候我是不是接了一个水管子呀,那我这close相当于什么呢?相当于把水管子从这头给拔了。
16:17
也就是说我这水还正留着呢,然后干嘛呢?我把水管咔一拔,导致什么情况?水管里是不是还有东西没流过呢?我就硬生生的把这个水管给拔了,那就导致什么?其实这一部分内容有没有写过去,没有写过去,但是水管干嘛了,被我关了,能看懂吗?所以这close行不行?不行,那怎么办?你想想我想想啊,我从这头拔不行,哎,但是我从这头拔有没有问题,没问题,因为我只要东西进到水管里了,理论上讲只要这头不拔是不是都能输输送过去,哎,所以注意这一块我们关闭流的时候不能用什么呀,Close close是拔那头干嘛呢?我要把另一头用什么呢?用摁要什么呀,结束告诉你什么呀,我这块已经完事了,干嘛呀,关闭,然后呢,你那块什么时候关,你等你留完了你再关啊,是摁的啊,直接再运行走,你留打开是不是关闭了,一个效果呀,一个效果再看这。
17:24
是不是写过去了啊,写过去了啊,所以注意这一块是怎么写的,我们应该调的是一个end啊,调的一个end,好,那这一块是我们说的一个这个流式文件的写入,其实通过这close你应该能大概看出来了,这流式文件写入其实它也属于一个什么呀,类似于异步的,因为你会发现当我关的时候,这文件是不是还没写完的呀,它也是一个基本上类似一个异步的性能也还是很好的,尤其是适合一些什么呀,大文件都适合用我们这个流式文件的卷源写入,它可以持续的去写一个内容啊,写个内容好回顾一下这个过程啊,我们这块是先来一个获取一个可写流FS,点一个一个stream r stream,然后我们可以对这open还有close键进行监听,当然你说我就不监听行不行,也行啊,也可以不监听,因为如果你不关心它停没停也无所谓啊,也无所谓,然后呢,我通过这个right来持续的向文件里去写入内容。最后干嘛呢,把流。
18:25
关闭就完事了啊,就完事了,好,我们这儿停一下。
我来说两句