00:00
好,那么下边的话呢,我们就正式的开始来讲一下这个IO流了,呃,首先呢,针对IO流呢,我们做一个概述啊,回到我们这个课件的层面啊,首先呢,叫IO流的原理,以及流的一个分类啊,这个叫IO流,注意呢,别念成这个石流了。啊,这I和O是吧,啊,一说这个I和O的话呢,就想到这个谷歌的话呢,之前每年都有一个谷歌的叫IO大会。对,这个名起的还是挺有创意的哈,这个IO呢,就是有时候我们就理解成叫输入输出啊,因为大家呢都有信息的一个交换嘛,是吧,哎,那其实也可以理解成呢,有人就把它看成是一,这看成零了,因为计算机呢,本身用的是二进制啊,也挺有代表性啊。啊,当然了,谷歌自己的解释的话呢,叫啊,Vocation in the open啊,开放中创新啊,这个逼格又上去了是吧?嗯,就是IO大会哈,行,就是这样一个简单的联想啊,然后我们这里边儿这个I和O呢,其实是两个单词。I呢叫input o呢叫output,所以呢,IO流我们也可以称为呢叫输入输出流。
01:01
OK啊,诶这呢是我们具体的一个,比如一个文件了,这个文件中的一个数据呢,诶读入到我们程序当中,是以流的方式呢,读进来的,我们程序中的数据呢,也以这种流的方式呢,把这个数据呢,写出到具体的一个文件当中。啊,这就以流的方式来实现的。就像我们生活当中啊,如果这要是水的话呢,我们习惯叫水流。啊,然后要是这个电的话呢。叫电流。还传递人呢,人流人流不是一个流啊啊。啊,如果要是空气的话呢,叫气流是吧?啊现在的话呢,我们传输的是这个数据。啊,你可以说呢叫数据流,哎,但是数据流呢,泛泛一说也行,但是后边呢,我们专门有一个类呢,就叫做数据流了。啊,所以说呢,说数据流呢,稍微的差点意思,那你就说叫IO流吧。啊,输入输出流啊,这样的一个概念啊。好,那这块呢,提到这个输入输出了,其实我们这块呢,要站好这个位置。
02:05
或者叫呢,你站好这个角度,因为角度不同啊,这个呢理解呢就不一样了。比如说啊,这是这个甲是吧,这是这个乙,甲呢,呃,借了100块钱给这个乙,对于甲来讲呢,就是输出了是吧,乙呢,就是输入了。或者说就从这个国家层面来说,两个国家呢,做生意,我们讲这叫入超出超是吧。对,这个你从不同的角度来讲,那这个呢,它的概念肯定是不一样的了。所以这块我们输入输出呢,你一定要站好位,角度呢很重要,我们站位在哪儿呢?注意我们站位在这个程序的角度。或者叫代码的角度。那你也可以理解成了我们站位在这个内存的角度。啊,程序内存都可以啊,假设呢,这就是你是吧,好让你站在这个内存的角度,如果说呢,这个数据呢,是从我们这个呃一个文件当中,或者呢,通过网络呢,传输到你这个内存里了。
03:03
或者叫读入到我们这个程序当中了,这个我们习惯上就叫做输入流啊,因为你是站在这个内存和程序的角度来看的啊,那如果说从这个角度呢,就是诶传输出去的是吧。那他就是一个输出流。啊,为什么这个很重要呢?因为直接决定了我们后边创建的流,到底是创建了个输入流还是个输出流,这个区别就大了,啊明明呢,你想输入,结果你造了个输出,那就错了。所以呢,这个数据呢,如果是写出去的,从内存中往外写的,传输的这个呢,就是一个输出流,所以它的角度是不一样的。哎,其实生活当中也是一样,就是你看问题的角度不一样呢,这个可能得到的结论呢,也不太一样。啊哎,典型的话,你比如说叫呃,屡败屡战。是吧,哎,那这个呢,就感觉这个人还挺不气馁的是吧,你要说这个屡战屡败。啊,那这个就是有点太菜了是吧。屡战屡败跟屡败屡战,那这个呢,你看就稍微换一下就不太一样。
04:03
啊,再举一个不是那么恰当的例子啊,你比如说一说是一个女大学生是吧,白天上课晚上的话呢,天天泡夜店。你感觉有点有伤风俗是吧?那如果说呢,这个女生呢,她就是夜店工作的,为了挣钱养家,白天的时候呢,还提升学历,他去读了一个夜校的大学生是吧。你会觉得这个非常的。励志是吧?你看这个角度不一样,他就。表现出来就不一样了是吧。啊。哎,包括呢,现在这个一整美国呀,或者欧洲的什么CNN啊啥的是吧,一整呢,就是跟中国拍照的时候呢,就是加点滤镜啊是吧?嗯,就是你看到的确实跟我们平时感感觉到的生活好像不太一样,那就是角度角度问题是吧。哎,其实这个新闻呢,媒体这块一定呃要做到公正,但是呢,你再说公正,它也是相对的一种公正。啊哎,包括我们学习的很多的历史啊,甚至有的时候呢,都要想想是不是我们是。相对的一个公正的一个角度来看待的是吧。
05:01
啊,至少呢,我记得讲到这个隋朝的时候呢,说的那个隋炀帝是吧。荒淫无度是吧?啊,各种咔咔一顿皮啊,后来呢,也看一些文章,就说其实这个哥们儿还是挺厉害的是吧,想的是成就千古一帝呢,当然呢,这个有点有点失误了是吧?对,当然了,你从这个后后一个朝代来讲的话呢,后一个朝代起,前一个朝代的这个末代皇帝,那肯定没有说好的是吧?对,就是在这种朝代更替方面,这种正统性是极其重要的啊,在中国这种儒家的文化当中啊。OK。所以呢,我们角度呢很重要是吧,我们学习知识的目的呢,其实就一定要让自己尽可能站到一个更高的一个维度上去看待下边这些东西是吧,当然呢,你再高也总有相对的一个。位置是吧,你还是相对的高而已啊。你就像说这个,呃,在这个农村放羊的是吧,他以后要挣了钱呢,他就。
06:03
以后还让孩子还放羊,多养点羊是吧,就是他的视野呢,他就看到这儿了。是吧,你要对一个这个。这个这叫什么,乞讨的人来讲,这不以前说嘛,说他看到这个古代的皇帝巡游了,说以后我要当了皇帝,我一定要拿一个金碗去要饭,是吧。啊,就是这个认知的一个问题了啊。好,这个引起大家的共鸣了,我们再收回来啊。刚才呢,我们讲这个流的时候呢,是以输入输出这样的一个角度来看待的啊,说这个流呢,分成输入的流,还有输出的流,这个呢,其实属于我们流分类中的一个角度啊,就是以这个流的流向的不同,哎,我们分成了叫输入流和输出流。哎,这个呢,已经说过了啊,然后呢,我们还可以呢,以操作数据单位的不同分成了叫做字节流和字符流。诶什么意思啊,就是我们刚才呢,看到这里边儿呢,传输的这个数据,这个数据呢,如果是一个字节,一个字节的为基本单位,我们就叫做字节流。
07:02
如果他要是一个字符一个字符的。一个字符其实就俩字节了是吧,哎,这个我们就称为它叫做字符流。所以呢,就看你操作数据的单位的不同了啊,然后另外一个呢,就是IO流的一个角色的不同。分成了叫节点流和处理流。哎,节点流什么意思呢?就直接从数据源或者目的地呢读写数据,比如说我们这儿呢,是一个程据,这呢是一个文件啊,我们叫数据源了啊啊,我直接呢,就现在有一个。啊,就咱相当于是一个管道一样哈,直接呢,就怼到我们这个数据源上了。这怼能听懂吗?嗯,插到也行是吧,诶然后呢,你就这跟水管一样,插上去之后呢,一开这个水龙头A就开始流流水了是吧,这个呢,直接呢把这个流呢,诶怼到我们这个数据源上呢,这种叫节电流。什么叫处理流呢?说呢,不直接连接到数据源或目的地,而是呢,连接到已存在的流之上的。啊,其实我这个是这样画的,就是我要都覆盖的话,你就看不到里边了啊,所以这块呢,就是一个切面一样,呃,最里边这个呢,我们叫节点流耗在你现有的这个流的外边的啊,你比如我们这个流。
08:10
是吧,哎,还有我们这里边儿的这个流是吧,它俩的话呢,相当于就叫做处理流了。OK,这呢就是留的不同的角度,下边我还放两个图啊,然后这块呢,咱们也稍微的可以画一下啊,然后便于大家呢去理解这个事儿,因为我们后边要讲的理由呢是比较多的,哎,大家呢得能够从不同的角度呢去理解这个流。OK,好,那首先的话呢,我们整一个叫数据源吧。那假设就它了啊。这个我们给他换一个。轮廓换一个色吧,这个啊。好,这个呢叫数据源。这个数据源的话呢,你就想象成比如说我们磁盘当中的一个文件啊就可以了。啊好,对应的话呢,我们这个位置呢,咱们叫程序也行,叫内存呢也可以。
09:00
啊,或者呢,你理解成就是内存是吧。好了,然后现在的话呢,我们有一个具体的流。啊,这样的相当一个管道了,哎,我们就诶怼到这样的一个数据源上了啊好,那么这时候呢,我们其实已经可以呢,有相关的一个分类了,哎,这时候我们先开始这个数据的一个流向哈,如果呢,数据呢,是从这个数据源流到我们这个程序或者内存当中的。我们就称为呢,它是一个叫输入流。好,这个呢,是以这个流的流向的不同来区分的,诶如果呢,你发现这个流啊,是从这个程序呢,流出到我们这个数据源这块呢。就是输出流。哎,行,这个呢是按流的流向的不同啊,然后呢,接下来一个角度呢,是按照处理的数据单位的不同,那就是我们具体呢去看了一下,这里边儿这个啊,最里边呢,处理的这个单位哈,这个单位的话呢,如果它是以一个字节为单位呢去传输的。哎,我们称为它叫做字节流是吧。
10:02
如果呢,它是以这种字符为基本单位传输的,叫字符流,哎,所以呢,它呢刻画的是这个。哎,我们说那叫存储单位啊。哎,不同。行,这呢是我们这样的一个角度,OK,然后呢,第三个角度呢,就流着角色的不同,角色的不同呢,你比如说我们现在这个流直接呢,就啊把这个流呢,对接到我们相关的这个数据源上了,那这个流呢,我们就称为呢叫做节点流。这个呢,我们叫节点流啊。行,这个我们把这个颜色呢,咱们换换啊,哎,比如说这个输入输出呢,它俩呢是一组的,哎,咱们用这个也行啊,这个是输出流,这个呢是输入流,这呢是一个角度,然后这块呢也是一个角度。啊,比如说这是一个角度啊,这个节点流呢,这是另外的一个角度。啊,我们再换一个颜色啊,比如这是一个角度好,然后呢,我们在线的这个流的基础上呢,还可以呢,再包一个外边的这个流。
11:05
这样包一下包的话就看不见了,我把他那置顶一下。哎,这么着啊,哎,那后边这个呢,就换成这个色了啊,哎,这个橙色的。这个还得也置顶。哎,这个橙色的,包括橙色的外边呢,还有可能再去包一个瘤。把它呢至底是吧。这么照一下啊,这个我们再换成是一个就是黄的哈,好,那么这时候呢,这个橙色和这个黄色的。这个颜色上。能分出来吧。别突然发现呢,这时候自己有点这个障碍是吧。嗯。这两个瘤的话呢,我们就称为它叫做什么流啊。处理流啊。行,这个呢,就是按照这个流的角色的不同,哎这样的一个分类,好这块的话呢,我们从不同的角度呢,做了一个区分,比如说呢,我们回头呢,写程序的时候呢,要用输入流了,这个你得知道呢,去找输入里边的哈,处理的是字节了,你得找字节的,这个你得知道是不同的角度的一个分类。
12:10
好,这个呢,我们要清楚这个事儿啊,诶可以把这个图。哎,这个我们,诶复制一份回过来,这个咱们就放在这儿了啊,CTRLV一下。这个呢,我们来一个。啊,Shift f6。哎,流的一个分类啊行,然后呢,我在这个课件里边呢,这块其实也写这个事儿了。啊,这个大家稍微的回顾一下啊,这个按照这个流向的不同。输入流。输出流是吧,哎,按照它呢,叫处理单位的不同。哎,字节流字符流啊,按照呢,它这个流的角色的不同。对,这个呢,我们叫什么流。哎,接电流。哎,处理流OK啊行,这个呢,我们就说到这儿了,这个说完以后的话呢,那么回过来,哎,我们说呢,诶这一章呢,到底有多少流啊,哎说呢,IO流这块呢,大概涉及到有40多个类啊,其实挺多的了啊,那整个呢,我们捋了捋说这40多个类啊,都是由啊这四个啊基础的这个流呢派生出来的。
13:21
啊,这四个呢,分别对应的就是input stream reader和writer。哎,那这时候我们看看啊,从不同的角度,刚讲的这个流的分类了啊,从不同的角度呢,我们要能够区分出来这个流呢,是一个什么流。哎,我们一起看看叭如说呢,从这个字节和字符的角度。这两个呢,是字节的。这两个呢,是字符的。啊,这个得记一下了。然后呢,从这个输入输出的角度来讲,他俩呢是输入的。啊input啊,Read读进来是吧,哎,这就是输入的,这两个呢,是输出的。
14:00
啊,这儿呢,大家要清楚。那我们这一张涉及到这个流呢,都是由这四个呢,派生出来的啊,那比如我这块随便拿到一个,这你得知道呢,它首先是字符流,而且是一个输出性质的。啊,随便呢,找一个你得都有能力呢,把这个事儿说清楚。啊,为什么这样呢?因为呢,我们刚才提到这一章呢,涉及到这流呢,都是由这四个呢派生出来的,那就是我们这四个瘤的相关的一些子类了,那你继承了谁,那你就具备谁的这样的特征,比如说你这个瘤。啊,这个流呢,就继承于它上面的叫字节的输出流,就这auto stream。那就自然而然,他就是个输出的。而且呢,是处理字节的。是吧,刚才我们不是说了它嘛,是吧,它的特征是什么,对应继承于它的这个流的特征就是什么。啊,这块比如说这个。啊,以这个为例吧,这个呢,你看这个后缀呢,叫input stream。首先呢,它是输入的。然后是字节的。哎,这样呢,就区分出来了。
15:02
OK啊哎,所以上边这块呢,就是四个呢,我们叫鸡类了,而且这四个类的话呢,还都是抽象类。说白了就是我们不会去造他们的对象了,如果你要造对象呢,都造下边这样的一些子类的对象。哎,此类对象你看你需要的是个输入的啊,输入的话呢,你就得需要考虑从这个和这个体系下边去找了,然后是字节的啊,那就是这块呢,去这几个里边去找。啊,其他的类似的这样的一个逻辑。OK啊行,那么具体说我们随便呢挑一个啊,你说这个流它是一个字节还是字符呢,咱们主要看后缀是吧。哎,你看它这个后缀呢是什么,基本上我们就能知道它是一个什么样的流了。所以这呢是一个小的技巧。OK啊好,那这呢,就是我们这一章里边呢,涉及到的一些流,当然呢,也没有全列出来啊,那这些流呢,咱们也不会全都讲,咱们只讲其中的一部分,讲哪些呢?就讲这里边儿这个底色呢,是偏蓝色的这些。
16:01
啊讲就可以了,比如说这四个的话呢,他们直接呢就可以用来操作。文件了。其实我们是不是就叫做节点流了。接电流直接来操作文件的,这呢也是最基础的四个流了,所以咱们要讲的就先讲这四个。这四个里边呢,这俩呢是处理这种字节的,这俩呢是处理字符的嘛。OK啊好,这四个讲完之后的话呢,我们再讲一个处理流,这个处理流呢,叫做缓冲流。啊,缓冲流它的作用呢,就是能够加快这个文件的读写的效率。如果我们这个文件比较大,你要使用上面这些呢,就比较慢,你要使用下边这四个的话呢,就比较快一些,所以这是它的一个主要作用。好,然后呢,我们再来讲啊,叫转换流,这个呢就涉及到字节和字符的一个转换啊,这样的两个流,然后对象流涉及到这个对象啊,我们这呢说万事万物皆对象,对象呢,如果要想进行读写操作,我们就要用到这两个流,所以这呢就是我们这一章的重点的这些流。
17:02
OK啊,然后呢,一般情况呢,大家都会发现呢,我们这流呢,你看通常都是配对出现的是吧。一般的都是一个输入一个输出,一个输入一个输出,一个输入一个输出。啊,一个男的一个女的。但是呢,也会出现呢,有这样的流是吧。是吧?诶,这个呢,打印流,打印流都是输出的吧。所以他就不是说一个输入一个输出了啊,这就是两个输出的了。啊,就是我们社会上呢,不是也有这种,呃,异性之外的这种同性的这种关系嘛,是吧,都是和谐的是吧。哎,这个呢叫推回输入流,所以呢,它俩都是输入流,一个字节的一个字符的。诶,所以一般的话呢,都是一个输入配一个输出,当然呢,也有特别的啊,都是输出的,或者都是输入的。啊,理解一下就可以了啊好,那么拉回来这块我们说啊,基础的L流的一个整体框架,这块我们就提到了,首先由抽象基类有四个啊。
18:00
Input stream。Output stream。啊,这一章呢,我们写流好多都是以这两个结尾的,大家基本上能够写的有点想吐的感觉一样是吧?好,然后呢,这个呢在reader。Writer是吧,这呢是四个抽象机类,然后呢,刚才我们说了一下啊,接下来我们要讲的话呢,就讲四个基本的这个节点流了。四个节点流是得反应过来啊,节点流在这儿呢,就是直接呢能操作这个文件的啊,哎,这个呢,对应的呢,怎么写呢。就是在现有的这四个的前边加一个就可以了。File input stream。File output stream。对,File reader。哎,然后下边这个叫R。诶就可以了啊好,你看这块呢,我们说呢,它能够直接用来操作文件,你从这儿来看呢,也能看出来直接操作文件的,所以呢这呢是四个节点流,咱们也可以呢,就把这四个呢,就称为呢叫做文件流。
19:09
啊,因为呢,它不是file开头了吗。啊,所以呢,也称为呢叫文件流。就可以了啊好,这呢就是我们要讲的这四个流了,这四个流的话呢,上边这两呢是处理字节的,下边这两个是处理字符的。啊,那咱们先来讲处理字符的。因为呢,咱们对于这种文本呢,还相对来说呢,比较形象一些啊,诶上面这种处理字节呢,你比如说是一个音频呀,视频呀,图片呀,这个我们这个细节呢,就不太容易看了,所以咱们就先放放这个,咱们先来看下边这两个。那么刚才这个讲解呢,咱们可以看到呢,是关于这个流的一个基础的一个介绍啊。
我来说两句