00:00
好,那咱们呢,接着来讲IO流这样一章,呃,今天呢,咱们这个重心呢,就是讲各种各样的流,它们的这些使用,虽然呢,虽然说呢,这里边涉及到这个API呢比较多,但是呢,你会发现它的具体操作呢,是比较相似的,所以说呢难度不大,你只要掌握其中的一个,哎,特别规范的一种写法,后续的其他的一些流的写法呢,都相似,主要呢,你后续就是关注这些流呢,有哪些区别,主要是什么情况下用什么流,把这个事儿呢把握住就行啊这样子的啊将来每天讲课呢,这个涉及到知识量呢,其实呃你要说多吧,不少,每天呢讲好几个小时,你要说这个呃这个嗯核心呢,你去总结一下呢,其实呢,重要的东西呢,又比较有限,嗯就是每天呢,大家得会学习啊,虽然说讲的课时很长,然后晚上呢,自习的时间呢,其实也比较短暂了,每天都整不完,所以你得把握这个核心的内容是什么,把这些重要的内容呢,一定要翻来覆去的多敲一敲。
01:00
咱们讲泛型的,那你就是把泛型在集合中的使用,那你要会写啊,咱们早上考试的时候,其实考的好几道题都是关于在集合中使用泛型的啊,你翻来覆去的就得写熟了,这个熟了以后呢,你推广推广下来,只不过呢,就换到以后别的类当中出现泛型也这样用就行,比如说呢,像comparable comparor,哎,你看它这个接口也有泛型,那回头你用的时候呢,你说哎呀咋用啊,这个时候你就去想,诶集合中怎么用的,集合中呢既有接口也有类,哎我们怎么去用这个泛型,那现在呢,你见到一个comparable是个接口,你想想咋用是吧?哎,其实都是类似的,关键呢,就是你得先把握住一个核心的,就是在企鹅中的使用啊,那么呃,你敲完以后挺熟了,过了两天涉及到要用了,发现忘了,忘了呢,首先你得承认自己是一个普通人是吧,哎,大家呢,都是普通人啊,咱都是啊,哎那人都会忘,那都会忘怎么办呢?那你就见到的时候你就再敲一敲呗,所以你不要就忘了时候特别痛恨自己说。
02:00
智商不够啊,这特别差是吧?啊,否定自己没有必要,人都这样哈,哪能说你过目无忘,你要会写,那不成过目无忘了吗?那你就得载入史册了得是吧?啊,所以你都很正常啊,翻来覆去来回用,然后呢,又用到又不会了,再回去看啊,那么来回这样去看,这样这样的话呢,你就记住了,同样的话呢,你来回这样看的东西,它一定是重点的东西啊,那自然而然的你也就掌握住了,哎,你这样一想心态就好多了是吧?啊,当然呢,你记着敲哈,你别看到这个是前面讲过的,然后说哎呀,这个我都忘了,忘了就忘了吧,那麻烦了是吧,那就真忘了啊啊行,那咱们来看一下这个新的内容,那从十间点二开始,我们开始正式的讲这个流啊,首先呢,我们来提一下这个L流的一个概述,涉及到关于L流的一个原理和流的一个分类,啊这呢我放了一个图,这呢就是每年呢谷歌呢有一个叫IO大会,非常的有名,大家呢每年呢都可以去关注一下谷歌的IO大会,涉及到当前的一个行业的新的一些流。
03:00
型趋势啊,技术的一个发展方向,那行业呢,其实都会去关注啊,这个IO的话呢,呃,这呢,因为跟咱们这个IO呢对应起来了,所以呢,我就放了一个这个图啊这个解释的方式呢,有很多种,这个其实谷歌的一种官方解释呢,叫invoc in the open啊简称呢叫IO,就是说在开放中创新,言扬之意呢,就是大家呢共赢是吧?呃就是谷歌呢,相对来讲还是现在,呃这个互联网的一个标杆了啊,不管是这个体量上来讲,还是在一些技术水平上来讲,还包括呢,他的这种开放的思维上来讲,都值得呢,全球去其他的公司去学习,尤其是我们中国是吧?啊值得去学习啊,我们的创新也有,但是呢,对于这种顶级的这种互联网公司啊,规模已经很大了,还始终保持这种创新,同时呢,你还不要去打压这些其他的小公司啊,是值得思考的啊,那么还有一种解释呢,就是叫input和output,就输入输出啊,还有一种解释呢,就是。
04:00
二进制一个是一,一个是零,所以说呢,你看谷歌起这个名字呢,还是非常的有水平的啊,比咱们国内的一些大会起的要好一点啊,当然不是说国内的也不好啊,比如说百度,呃,这个阿里也有,每年的叫云栖大会是吧?啊就是其他的公司有的也有一些,但是从那个影响力呢,影响力上来讲,那肯定没有谷歌这个要强啊嗯,行,简单的就是说一下这个事儿啊,然后过来咱们呢,开始来讲这个IO的一个基本原理,说呢,一提到叫Java中的这个IO啊,I呢就是input IO呢就是output输入输出的一个缩写,主要呢,解决的问题呢,就是处理设备之间的数据传输,这个设备之间没有明确的说呢,只是咱们现在要讲的,从内存呢,写入到一个文件,或者说呢,我们把这个从这个文件当中,把这把这个数据呢读过来,不止这个,我们进行网络当中传输呢,也是三角IO了,这呢我是一个这个主机啊,咱们通过这个网络的方式呢,把数据呢发送出去给他。
05:00
然后他呢,也可以发送数据给我,这个过程我们都可以称作叫数据的一个IO,就涉及到了数据的一个传输啊,这个大家体会一下,下边呢,提到了说数据的这个输入输出啊,都是以这种流的方式进行的,那我们就叫做IO流了,这个呢也很好理解,就像我们说这个水,水的话呢,从这个位置流到这个位置,这个我们通常叫做水流。那么这个电呢也是一样,从发电厂一直到我们这个千家万户,那我们叫做电流,那现在呢,我们是数据,数据呢从这个位置流向这个位置,那我们叫数据流,数据流的话呢,有时候呢,会误理解为呢,或者你也可以成泛泛的去说叫数据流也行哈,但是有时候呢,也会物理解为呢,咱们有一个专门的一个类呢,就叫做数据流了啊,所以这块呢,我们诶可以呢,就叫做IO流,就涉及到输入输出的啊,这个数据啊引流的方式呢,进行来提到这个流的一个概念啊,那么这些流的操作的话呢,虽然说涉及到类比较多,但是呢,他们基本上都是以这种标准的方法进行输入输出的。
06:08
比如说呢,你想把这个数据呢,给它读进来,咱们呢,通常都都用的这个方法叫做read。去读这个数据,那如果呢,你想把这个数据呢,给它写出去,对咱们用的这个方法呢,哎,都是叫right,只不过呢,由于我们处理的这个实际情况,这个数据不一样,那就read的时候呢,跟RA的时候呢,这个参数呢会有区别,但是他们的这个操作方式啊,基本上是固定下来的,所以这章学起来呢,其实虽然说涉及到类比较多,但是呢,不是特别困难,因为呢,他们的操作都非常的相似,哎就这样子啊。OK,那么接下来的话呢,我们把这个输入输出呢,再进行一个细节的说明,那么输入和输出它其实是一个相对的概念。它其实是一个相对的概念,我们比如说以第一个图为例,这呢是一个文件,这是一个程序,如果大家站位在这个文件的角度,我们现在这个箭头,对于文件站位在这来讲,这算输入还是输出啊,输是不是就输出了,因为数据从它这出去了,这叫输出,那么程序这块过来呢?这就叫输入了,这个时候你站位是在文件这块,那如果说呢,你站位的是这个程序的角度。
07:20
对,那第一个图呢,表示的就成了这个输入了。那现在我们需要关心的就是咱们应该站位在哪,到底对咱们应该站位在这个程序的角度,那这个程序呢,你运行起来以后,那它会相应的一些变量加载,其实呢,你也可以理解为我们占略的是这个内存的角度,内存的角度如果这个数据是从一个具体的文件当中,或者说呢,是从这个网络当中,这个数据呢,是流向我们内存了。流向我们这个内存了,或者说呢,流向你当前这个程序了,这个程序呢,你是把这个数据呢读进来,读到内存里了,这个我们称作叫输入啊,那么对应的你要是从内存中把这个数据呢,给它写出到磁盘当中,或者说呢,进行网络的一个传输出去,这呢我们叫做输出。
08:11
啊,一定要把这个站位呢明确下来,因为它这有这个相对的一个概念啊,这个站位你清楚以后,你再去用具体的类的时候呢,才不会用错误,比如说你现在明明呢是想把这个数据读到内存中,这时候呢,你应该用找那个输入相关的一个类啊,流当中的一个类,那你要是写出去,你去输出的那些流的泪当中找一个,你别整反了,整反的话呢,这个就错了,所以这个站位呢很重要。啊,就是基于呢,我们这个站位呢,它是一个相对的啊,就刚才说这个事儿。那么跟说这个借钱也是一样啊,说这个人呢是叫甲,这个呢是叫乙,这个甲呢借给乙100块钱,你从这个甲的角度呢,他就叫借出了,你要从乙的角度呢,就成借入了,所以说到底是叫借出还是借入啊,这个你得说清楚,你是站位在谁的角度来说。
09:05
啊,所以这呢,就是我们说的这个事儿,大家呢,占位不要错了,占位到程序的角度,或者说呢,叫内存的角度去来看待这个问题,好,这呢叫输入和输出,相当于呢,咱们从某一个角度上来讲,把这个流啊,就做了一个分类,就是以这个流的流向的不同做了一个分类。啊,那么除了这个流向的不同,我们可以做一个分类之外呢,还涉及到两种分类的方式,第一个就按照操作这个数据单位的不同,按照操作数据单位的不同,我们呢,分为叫字节流和字符流。那么字节流就是说我们最基本的单位呢,就是一个一个的BAT啊,字符流呢,那就是两两个字节了,那就是一个一个的差啊,一个一个的差这样方式去存储的,那相当于就是字节的话呢,咱们知道底层就是0101了啊,那字符的话呢,比如我们以一个A这算是其中一个啊,一个B去传这个是不是就能够知道它到底这次传的是个什么了,是吧,那相当于呢,就是我们这种字符流呢,其实更适合呢,主要用来处理这种叫文本数据嘛。
10:18
现在呢,咱们有个TX文件,我想把这个文件的数据读到咱们内存里边,因为这个文件里边每一个位置,每一个是不是都是一个字符啊,那我们就可以以这种字符为单位去进行存储。啊,进行一个这个数据的加载啊,或者是写出去啊等等,那么这个字节流字节的话呢,就是一个一个的fat。啊,是这种比较抽象的哈,0101这样方式,那么什么样的这个数据适合用字节流呢。比如说你这个图片,哎,这个视频。等等是吧,其实有很多哈,那么像这种呃,图片的话呢,你总不能说说一个一个差啊,说这里边有个A有个B,那不对,那这里边呢,底层就都是这种二进制的这种数据了,我们呢,哎,像这些非文本的这种数据,我们呢,都习惯上用叫字节流,那现大概有个印象,咱们写代码的时候呢,也会说这个问题,那这呢,我们就按照这个数据单位不同分成了这样的两类啊,那么再接着呢,按照叫流的角色的不同,分成了叫做节点流和处理流。
11:24
这个呢,相对来讲就抽象一些,什么叫节电流,就是如果说我们把这个,呃,这是一个文件哈,现在呢,这是咱们这个内存了,我想把这个文件中的数据呢,加载到咱们内存层面,我直接呢,就在这个上面呢,诶对应的它造了一个流,直接作用在这个文件上的这种流我们称作叫做节点流。叫做节点流,就比如说你这块呢,是一个水池子,这个呢是你在家里边想洗澡啊洗想洗澡这个事儿,这就是你的这个程序了啊,你现在整个水管直接怼上去,然后呢,这个水就流过来了啊,就是直接呢这个管就怼到这个这个这个这什么呀,这个水池子上了啊,像这呢,就称作一个叫节电流,那什么叫处理流呢。
12:10
就是在你上面这个基础之上呢,你又包了一层。就是呃,相当于我们这个流呢,它的这个对象又作为我们外边这个流的一个,呃,构造器中的一个参数传进来的,相当于作为一个属性出现了啊,我在这个流的基础上又包了一层流,那么外边包的这种就叫做处理流,我现在包了一层,我还可以再包一层,凡是呢,你在已有的流的基础上包的这种都叫做处理流,处理流的话呢,就有很多种了,那你作用就不一样,比如说呢,其中有一种呢,就是我们在现有的这个流上呢,我就包了一层,它的作用呢,就是加快你这个流的传输速度。比如呢,你这个用个水管啊,这个水管呢,直接呢,就把它怼到我们这个池子上了,这个时候呢,这就是一个普通的节点流,现在这个这个水出的太慢了,这个这个形象点你可以想啊,我这块呢,又给大家又包了一层这个管,这管的作用呢,能够诶里边呢,帮着我们推着这个流往这块快的去流过来,那么外边包的这一层呢,它就叫做一个处理流了。
13:13
这是流的这种具体的分类方式,哎分类方式这个呢,需要大家掌握,哎,得能够把这个事儿记住啊,哎,那下边这不我也画了个图,咱们呢,也简单的再去画一下,把这个事儿呢,大家再去明确一下啊,那么这个事儿先要清楚,首先我们比如说这是咱们的这个所谓的叫程序,或者说呢,叫内存也可以啊。那我们站位在这个程序的角度,站在这儿去看待咱们这个输入输出啊的一个情况,我再提供一个专门的就是我们的数据啊,我用一个桶来表示吧。啊,这呢是我们的数据啊,或者叫具体的一些文件了啊,那现在的话呢,我们这个,呃,从程序的角度我们去看,如果呢,你会发现这个啊,当然咱们先整一个流啊,就流呢,就相当于是个管道一样啊就以它为例吧。
14:09
哎,这个管道就怼上去了,哎这呢我们就作用这个流说这个流的话呢,怎么去看待它,说从不同的角度呢,对它进行一个分类,那我们就先来看说看你这个流的这个流向是什么,如果你的这个流向呢,是从呃普通的这个文件,这个数据流到我们程序当中,我们把这个呢就称作叫输入流啊,如果呢,发现你这个流呢,里边的这个数据呢,是从这个程序当中流向我们的这个文件里了,我们就叫做输出流。那这是这样一个情况,那这呢是从这个流向的这样一个角度,我们去做了这样的一个分类,啊,那么再接着我们看一下你这里边处理数据的基本单位是什么,说你是以一个一个的BAT为基本单位,还是以一个一个的差为基本单位,这样就考虑它这里边的基本单位的问题,我们呢就分成了两类。
15:09
哎,对,你要是一个一个的字节的话呢,就叫做字节流,如果呢,是以这种一个一个叉为基本单位的,就叫做对字符流,是关注你这个流的这个里边操作数据的基本单位啊,分成了这样两类,那再接着再接着的话呢,我们要看的就是哎,你这个流如果是直接作用在我们这个文件上的,我们把它呢,就称作叫做哎是不是叫节点流啊。这叫节电流。那叫做节点流,那么如果呢,你这个流是作用在啊,现在有个流是作用在已有的这个流的基础之上的,比如说我们在这个上面呢,咱们又包了一层流,这样,哎,这个我先给大家换一个色啊,换成这个色,至于底层哎,比如说我们这里边这个这这几层你能看到里边这个了啊,我们这个黄色的是作用在已有的这个蓝色的这个流的基础之上的,这个黄色呢,其实就叫处理流,那有可能在黄色的外边呢,我们再包了一层流是有可能的。
16:16
哎,这个我们换成一个黄的啊。哎,这一底层,呃,啊,刚才那不能叫黄的了,叫橙色吧,刚才这个橙色,还有咱们现在这个黄色,它俩呢,就都叫做处理流啊,这个我们啊,这叫节点流,嗯。我我往这放一下吧,橙色的,还有我们这里边这个黄色的,看他俩这个往前一点啊。哎,他俩呢,就都叫做啊处理流。哎,就这样啊,那这里边呢,它俩是说的一个事儿啊,然后这个输入输出呢,是一种分类的这个方式啊,这说的是一种事儿,这俩呢是另外的一种分类的角度。
17:06
哎,这样来区分一下这个问题啊行,这呢是我们关于这个流的一个分类,哎,通过这个图呢,大家去关注一下,记住我们这个流呢,按照不同的角度分成这样的三类。好,这就过了啊。
我来说两句