00:00
行,那么缓冲流咱们呢,明确它的一个目的呢,就是来读写文件的时候呢,提高这个速度的,相较于咱们讲的节点轴来说的啊,那么咱们关于缓冲流呢,还差这两个呢,没有演示,呃,大家呢,其实也能够呃自己呢推论出来它的一个写法了,其实呢,跟咱们刚才写的呃,Buffer的input stream buffer的output stream呢其实类似,就是包装在咱们已有的啊节点流的基础之上,它俩呢包的话,那就分别呢去包咱们这个一开始写的这样一个框架,这哎他呢就包这个file reader,它呢包file reer哎就可以了,哎所以呢,通过这呢缓冲流咱们也能看到啊,确实这里边我们提到了相当于第三个点啊叫处理流。处理零呢,呃,它呢,就是啊,这个套接在咱们这个叫套接了。
01:00
在这个已有的啊,这个呃流的基础之上。这呢,我写的也有的流,没有说这个流非得是一个节点流,对,因为呢,咱们这儿呢,是一个比如说file input stream,咱们呢包一个叫buffer的input stream,那我外边呢,其实有可能还会包别的之类的啊,哎,就是包在已有的这个流的之上呢,这种都叫做处理流了,嗯,行,那咱们呢,这块呢,简单的来演示一下,Buffer的reader buffer的writer,哎,很显然它俩呢,是不是就是用来处理文本数据了,哎,文本数据,这文本数据咱们这写了,Hello呢,它稍微有点这个这个数据有点少哈,嗯,在给大家发的这一章当中,我这放了一个叫DBCP,就是一个普通的文本文件啊,不用多想别的啊,这里边具体的内容啊,大家不用去细看了啊,这实际上是后边我们讲的一种数据库连接池的技术啊,这是它的一些具体的参数的一些设置,每个参数的一个意思,这呢不用关注,你就把它当成是一个普通的文本文件里边呢有中文啊,有这。
02:06
新文啊就OK了,现在的话呢,我们想实现对这个文件的一个复制啊,实现它的复制,那你可以考虑去用咱们一开始讲的这样的两个比,但是呢,显然他俩的效率比较差,哎,我们现在呢,就考虑用这个效率更高的这个buffer的去替换。啊,用它俩来写好,咱们这块呢,就来演示一下啊,通过这个例子呢,咱们来说一下关于buffer的reader和write的使用,Buffford buffford。行这呢,我们在这写一下啊,相当于是使用八的。哎,Reader和哎,Buffer的writer实现文本文件的一个复制,OK,那这里边当然也言外之意呢,就是说我们这个buffer的reader和writeer,和咱们讲的file reader writeer一样,它俩呢,是不能够用来处理非文本文件的啊,哎,这个已经说过这个事儿了,行,那接下来咱们看一下,咱们去复制这个文件还是这几步,哎,还是这几步,要还是这几步呢,先造个文件,再造一个这个这个字节流,再造一个缓冲流啊,那咱们也发现了,是一层层往里套哈,你看以上边这个为例,就是先造出来一个文件,文件呢放到这儿,再造出来一个字节流。
03:43
啊,这个呃,节电流是吧,再造一个这个节电流,这个节电流呢,又放到这儿造出来一个它我能不能把这几个合成一个。都以匿名的方式来写。哎,那就合成一块,就这样了,我就上来就对我就buffer的reader,等于new一个buffer reader在这里边我去new啊file reader,哎在这里边我再去new file,哎这样,哎这呢,我们要复制的是它啊CTRLC。
04:18
哎,就放在这里边,哎,这个比较熟了,以后呢,都可以这样来写了,没有必要呢,给他写的那么规范了啊巴福尔的。Writer。哎,New ber的writer里边去new fair writer在里去new这样。嗯,我们呢,给它复制到一个路径上啊,哎,我就直行DBCP1.tst。好,这样啊,这是第一步,相当于呢,我们造文件造流啊就都搞定了,下边呢,就是一个具体的读写操作,哎,就是一个复制的一个过程,这呢我们是一个字符流,对叉型数组,哎又一个哎叉型数组,这呢,比如说这个你写个1024也可以啊,哎,Int一个LN,然后呢,Y循环LN等于B2.ra的。
05:19
诶,到我们这个C8当中,长度不等于负一啊,就还有数据,然后写出据Bw.right。哎,CF从零到L音,哎这样就搞定了啊这里边呢,注意就是咱们Bw.flash咱们那会儿说过这个事儿,它呢,只要是呃,它里边还是有相应的一个缓存的区的一个大小,对吧。咱们这个B啊,Buffer的reader的时候,你看default这是差的一个buffer的大小,这是提供了多少个字节啊,8192个字节。哎,892咱们不说了,不1024的这个呃八倍呗,呃,1024呢,咱们不是习惯上像这个,呃1KB咱们等于1024BAT是吧,那这么多次节,那这块呢,就像刚才我们讲的那个八分的input stream,那不就相当于是八个KB嘛,这呢是八个KB,呃,这个是八个KB,这个相当于它对应的是这个叉型的。
06:21
差型的就是我们现在这个差型数组,你这数组里边这一个,这就算一个差了,咱们这是不是8192个差了啊,就这个意思啊。行回过来,那这个呢,Flash咱们说了,就是当它达到你这个缓存的这个大小的时候,它自动的就做一个flash了。嗯,这个其实我们就可以不用再非得调这个flash了啊,这呢就进行了一个读写的过程,接触以后我们呢,再去关闭资源啊,关闭资源那我们说了只需要关闭最外层的就可以了啊,B2啊BWB2先写谁后写谁都行,他俩是处于这个同一级别的啊。
07:03
OK,这呢我们就完事啊,这呢是咱们第一个步骤啊叫创建啊这个文件啊和相应的流,哎这样就行啊,这呢相当于我们把四部就给合成了三部。你还是叫四步也行,三步呢也OK啊,就是这样的三个过程,这个完了以后,同样的需要考虑处理异常,其实我这样写的话倒是很清楚的,知道123步是吧?啊,你要一包的话呢,有时候这个过程看着就显得乱一点乱一样啊嗯,Out shift z。哎,这这这还是这一步,这是第二步啊,第三步呢,在这呢,把它往上提,哎在这啊,哎if哎BW哎不等腰啊。
08:04
嗯,好这样,然后呢,分别呢,对他们再进行一个try catch。Can't count。行这呢咱们就完事了啊,那完事以后呢,现在咱们这不希望进行一个文本文件的复制嘛,那咱们就直接呢来点它执行就OK了啊,执行这个完事啊,完事以后诶这块呢,生成这个它点开啊没有问题啊,这不跟我们本身这个文件是一样的啊。行,没有任何问题,那这块你也可以打开看一下这个文件的一个大小啊嗯,这呢是原文件,这呢是我们这个复制的目标文件。啊,1995199要。啊,完全一样啊,没有任何问题,行,那这儿的话呢,我们就通过这样一个例子给大家演示一下,叫buffer reader和buffer reer的一个使用,似乎呢没什么大的区别,这块呢,其实调用者变了,原来呢,我们是用的啊file reader和file writeer啊做了一个read和write,现在呢换成它俩了,哎,就这样啊,那这块呢,多说一个事儿啊,多说一个事儿,我们呢,对于这个buffer的reader来讲,哎,咱们刚才说了是你直接还是这样read跟fair reader一样的方法,其实呢它呢多一个方法,多了一种处理方案,我们呢,把这块呢,整个我注意一下啊,把这块注意一下,这个我写成叫方式一,方式一呢,我们仍然使用的。
09:31
哎,是我们这个叫叉型数组,哎,那它呢多了一种方式,方式二我们呢,可以去使用一个啊这个string啊什么意思呢,你看我写咱们这个B2,咱们去read的时候呢,诶,咱们刚才现在用的是这个方法,把数据呢都存到咱们查行数组当中,还有一个方法呢,它叫read LA。对,直接呢一次读一行啊,一行一行的读,所以这块呢,我们调一下这个方法,那这呢有很多行,那这个操作呢,就得写到循环里了啊,那我们这么着处理一下,首先呢,我先声明一个string,那我这呢就叫做data吧,就是我们要这个read LA到的这个数据,接下来还是一个while,这个while里边呢,我这个data拿我们这个B2.rela去赋值。
10:23
这样去赋值,那么这时候我们关心的就是怎么算是到结尾了,对,你看我们这个read line啊,就看它了这个F2一下,看一下它的这个返回值,说呢,要不呢,你返回的就是你当前这一行的这个数据,就是这个润了啊,说不包含任何的这个,你看不包含那个换行符啊。就是它不会自动的帮我们,比如读完第一行,读第二行呢,说给你换行了没有,它不包含这个换行符,或者的话呢,就是它这个no,如果你是到文件的一个末尾了,那所以我们这块呢,判断是不是就是它是不是no。
11:02
哎,那这块我们就回来,哎,当你不等于no的时候,这么着不等于no的时候,我们下边呢,就要输输出这一行数据,哎这一行这一行数据呢,我们还是用BW啊去做个right,哎数据呢,你不都放到我们这个string这个data里边了吗。是这样,这个注意的就是我们这个写出的这个data当中,刚才我们看这个文档啊,写了说data当中是不包含是不是换行符的呀。它不包含换换行符,我暂时呢,我也不去加一个换行符,我们就这样写,看一看效果啊,这呢就写出去了,咱们也不用flash了,这块该关还关OK完事啊,完事以后我这时候有必要我要测试,有必要把它删掉吗?必要有必要吗?没有必要,因为我们这种写法呢,后边呢,相当于逗号是一个false,哎相当于是默认呢,输出就是对文件的覆盖了,好,我们直接你看这块呢,我们看到还是长这个样子的啊,现在呢,我就诶直接呢去运行我们这个方法。
12:15
可以了,可以以后你看啊,这是咱们这个DBCB点开。你看就一行了。啊,就是我们刚才看到这个解释里边说的啊,它呢没有包含这个换行符,那你得自己给它换行一下。怎么处理啊,一种呢,就是比较直接一点,你直接这块在后边就杠杠N一下是不就换好了。你不是不包含吗?我给你加一个不就完了吗?执行搞定,然后看这。是不是可以了。这不这个文件吗。哎,这样行啊,这个呢,就是咱们自己呢,去加了一下啊,它还有一种,还有一个什么呢,还有一个方法啊,嗯,方式一方式二,这个呢,我们写一个。
13:06
方法一吧,这样给它错开啊,这叫方法一方法二,这是个小事啊,BW点做一个right。嗯,这个RA的话呢,我们还只是把这个data呢,先放在这,它没有包含这个换行啊CTRLC还是这个事,那我们有一个方法叫啊new烂。说白了,牛量其实就是给你加了一个换行符哈,啊,没啥别的事儿了,就是这样写也行,或者呢,咱们哎,这样写也可以。那这也完事啊,过来啊也也是可以的啊,没有问题啊,所以它呢,这个方法的作用呢,就是哎提供换行的操作,哎这就可以了,行,那这块的话呢,我们整体呢,就算是说完了啊,关于这个环中流说完以后,我们再回到这个位置,简单的做一个总结。
14:05
总结梳理一下,行,咱们先讲的是这两个流啊,这两个流里边关于这个file reader,咱们用的它内部的方法,其实用的是read了,这里边咱们呢,是用的是不是叉型的一个。数组是吧,咱们用的是这个方法哈,那关于这个输出呢。咱们用的叫right right呢也是,哎先去写一个这个buffer,但是咱们用的是不是零到len这个,哎,用的是它啊行,那我们关注的就是这两个方法,那这两个方法的话呢,我们把它CTRLC一下放到这,哎把下边这个RA呢,我也CTRLC一下放到这。我们呢,只需要把这个叉改成BAT。就可以了。啊,当然这名字呢,我们一般也调一下啊,哎,这个就叫buffer了,哎,指明呢,就是他们两个其实操作的就是这个基本的这个单位是不一样子的。
15:07
啊,这呢,对应的就是这个情况好,那缓冲流。哎,缓冲流这呢,我们就说到这个buffer的了,Buffer的咱们会发现这两个咱们用的话呢,其实也是用的这个同名同参数的方法。这都一样。当然不是完全一个方法啊,这个是人家这个buff份的input stream当中定义的,这个呢,是你这个呃,节点流里定义的啊,只不过呢,这个方法的名字和参数恰好呢一样而已,哎,这样啊,那下边这个B的reader啊,也同样的道理。哎,也是同样道理,所以呢,大家会看到我们这一章处理的话,实际上非常规范,我们这一下子呢,其实就讲了八个类,八个类都讲了,但是大家呢,其实觉得也OK啊,因为呢,它处理的方式方法其实是太像了啊,哎,这个套路呢是一样的啊,是一样的,需要注意的就是咱们在这个b reader这块呢,它呢多了一个方法。
16:11
诶,它有一个叫read LA一次呢,可以读一行啊,都是以字串的方式呈现的,那别的呢,没有多啊,都都还是这样子的。啊,都是这样子的,那关于这种缓冲流,因为呢,呃,关于这种处理流,因为呢,它是作用在我们现有的这种节点流的基础之上的,呃,所以呢,像这种输出的,呃,像这个buffer的output buffer的writer,诶这里边呢,其实它还我们也看到了一个方法叫做flash啊,它有一个flash,它有一个flash就是刷新功能,哎每次当我们点刷新的时候呢,这个数据呢,就会,诶不管你这个缓存的区数据有多少,我们就都给你写出去了。啊,那通常这个处理轴都会有这样的方法哈,那那有的呢,这个呃,处理轴它没有自动的去给你写flash,那我们需要考虑去写,那像这个缓冲流呢,它里边已经有了,我们就给省略掉了啊,但是呢,我们也稍微关注一下,对于这种处理流来讲啊,输出的它都会有这个叫诶flash啊刷新这个缓存区的这样的一个操作啊。
17:16
哎,每当调动它缓存区的数据呢,或者叫你内存中的这个数据呢,就都会写出去了啊这个意思行,这就是我们的一个总结啊,大家呢,可以以这两个,或者呢,你是拿这两个作为一个最基本的一个这个这个模式是吧,呃,涉及到一个输进来,读进来,写出去,这只不过它俩单位处理单位不同而已,会写以后,那后续的像这个呢,只是在原有基础上套一下,这个呢,也如此就可以了啊,套路一样啊,那么开发当中我们要用的话呢,通常都要用缓冲流了,这个呢,因为效率呢稍微差一些啊,行,这就我们说的这缓冲流和节点流这样的一个对比啊。
我来说两句