00:00
好,那么到目前为止呢,咱算是讲了三波流,诶第一波呢,是对应的有四个流,这四个流呢,就是我们提到的一个叫节电流,哎这呢这四个,这四个完了以后,我们讲的第二个流呢,叫做缓冲流,对缓冲流呢,就是我们说的处理流的一种,后续的话呢,咱们讲的这几种呢,都叫做处理流,大家呢需要关注就是每一种处理流它的作用到底是什么,诶这个呢是需要大家关注的,那么具体的读还是写这种方式啊,其实跟咱们前面讲的这个最基本的这几个流呢,哎,读写的方式或者叫套路其实是一样的啊,就是咱们说的那三步,或者说你叫四步也行啊,是这样的一个过程啊,这是我们说的第二个流,第三个流呢,我们讲的叫转换流,转换流,这呢就涉及到字符和字节之间的一个转换,这呢就是它的作用,那么到目前为止,咱们讲的这几个流,哎,都还算是重点的,咱们一开始呢,讲这个流的时候呢,有一个。
01:00
叫表格,这个表格里边涉及到呢,这四个就是我们说的叫节点流,或者说呢,也叫做文件流,因为它是file开头的啊,叫文件流了,那这四个呢,就是我们说的这个缓冲流,然后这呢,这四个呢叫诶转换流行,这呢,就目前我们讲的这几种流呢,还都算是重点的,那接下来的话呢,我们再说其他的几种流,这几种流呢,我们就作为一个这个了解的内容啊,哪几个呢,说一下这个叫标准的输入输出流,这是一个,然后打印流这一个数据流这一个,这三个呢,大家作为一个了解就可以了啊,咱们接下来讲的话,就这三个了解一下,然后再往后的话呢,提到一个叫对象流,这个对象流我们这个也看成是像转换流或者缓冲流一样啊,需要大家去掌握的,那后续呢,这个随机存取文件流,包括呢NIO2,诶这块呢,我们又是作为一个了解性的内容,哎是这样子的啊知道的这个重点在哪那接。
02:00
这样的话呢,我们就来了解的说一下这样的三种流,那这个首先呢,说的叫标准的输入输出流啊,关于它的一个说明,好,那这块的话呢,我们就提到了一个类叫system,以前呢,我们讲常类的时候呢,也提过它system这个类的话呢,有三个属性,这呢我们直接呢在API这块来看。嗯。System。它有三个属性,第一个呢叫error啊,是个标准的这个错误的一种输出流啊,这个咱们主体就先不关注它了,主要呢,我们关注的就是下边这两个,一个呢叫in,一个呢叫out system,点表示的叫标准的一个输入流system.out叫标准的输出流,咱们在第一天讲hello word的时候,实际上呢,很早就接触过system叫out,紧接着后面的第2POINT line了,诶,输出一个hello word啊,咱们就输入到控制台上了,这个呢叫标准的输出流,它其实对应的标准到哪儿呢?就是咱们叫控制台的输出。
03:03
啊,那这张叫标准的输出,那标准的输入是哪呢?就是我们键盘输入啊,这块我们就提一下这样的一个流啊,那这样的话呢,这三个流我不妨呢,就都写在一个这个原文件里了啊,我就称作叫other的流啊stream了啊一个测试。好,那这里呢,我们主要提三个流的使用啊,这呢就叫其他这个叫哎流的使用啊。哎,这呢,我们主要呢讲三个,哎,第一个呢,就是提到叫标准的输入输出流啊一个它啊第二个呢,我们提示叫打印流,第三个呢叫数据流,OK,我们就按照这个顺序呢说一下,首先标准的输入输出流关于他的一个说明。
04:00
嗯,Public,哎O啊,这个我们就先写一个这个TEST1了啊,成标准的输入输入流,刚才我们看API呢,也提到了c.in它呢就叫标准的输入流。这个标准的输入流呢,我们说默认呢,是从键盘输入啊,接着c.al。叫标准的输出流,那默认呢,从控制台输出,诶就这样的一个情况。哎,就这样个情况啊,这呢是它对应的两个属性,那属性的话呢,也会有类型,我们可以看到这个in呢,它的类型就叫做input stream。哎,就是input stream,就是一个输入流啊,那么out呢,它叫print stream。这个print stream呢,其实就咱们一会要说的下一个叫打印流啊,就是下个打印流了啊,咱们先不过多的去关注,说这个打印流如何啊,就先看到这个层面,这呢是两个属性,那么这两个属性的话呢,我们也有它对应的set方法,比如说我们set in set out,这就相当于两个属性的set方法,通过这样的方式,咱们去修改它的默认输入和默认输出,这是可以的啊,这个大家也是做一个了解就行,这块让我写一下啊。
05:25
啊,标准的输入流啊,这个我们是1.1。然后呢?1.2啊,我们可以通过啊,System这个类的。哎,它的这个方法啊,叫set in啊,还有这叫set out这样的这个方式去重新指定。这个呃,这个叫什么输入啊和哎输出的这个,哎这个位置啊,或者这个流啊,重新做一个指定啊,嗯,这个咱们一会有这个例子,咱们可以看一看,这呢就是相当于是两个方法啊set in,那自然而然的,你这就是一个input stream类型的啊,那out啊,本身人家是一个。
06:19
哎,那你这块也得传一个print stream。哎,这样就行,行这块呢,大家做一个了解就行,那看一下我们这个PPT啊,这块也提到了,说呢这是两个,呃,比较基本的这个属性,诶默认的这个输入呢,就是键盘默认的输入呢,我们叫控制台或者呢叫显示器,哎都可以啊,那再接着呢,我们充电项,其实呢,就是对应的这个叫set方法,诶进行一个修改,行这呢就是基本的关于它这个知识,下边呢,我们有一个题目,通过这个题目呢,我们来来这个,哎这个练一下这个system.in的这个操作啊。那1.3这是一个练习,我们呢就来写这个练习,看一下这个题目说呢,从键盘输入字符串,从键盘输入字符串,要求呢,将读取到的整行字符串转化成大写输出。
07:15
转化成大写输出,然后呢,继续输入啊就是这呢是一个循环了,循环呢没有明确指明说变离体次说直到呢,你输入是E或者叫X的时候呢,才退出。啊,有点像咱们项目里边1234,你写四的时候呢,说叫推出类似这呢,是用的这个字符或者字符串来表示的,行这个程序的话呢,如果放在咱们以前,只要呢讲完scanner以后,大家呢,其实就可以考虑做这个事儿,那其实也就是说呢,这个程序啊,这个练习大家呢,是是不是可以用scanner来做呀。输字符串,那你就调scanner那个next方法呗,哎,读完这个字符串以后,你看这个字符串呢,是不是E或者ex,如果不是,你就调这个字符串,有个叫to upper case是吧?哎,你就six out输出一下就行,那如果要是不是这个呢,你就转换成大写输出,要是这个呢,你直接就。
08:12
退出这个循环,加个break不就完了吗?所以呢,这个方法一啊。诶方法一大家呢,可以去使用scanner来实现。这个难度不大,我呢就不写了,现在呢,咱们写这个方法二。换句话说呢,我们也不一定非得要用scanner实现呢,跟用户的从控制台这块一个交互。这呢,咱们就可以考虑呢,去使用叫system.in哎,它呢来实现。其实这个c in,你想想我们scanner是不是你造对象也用了c in了,对啊,就是c.in呢,它表示的就是从键盘输入。嗯,所以说呢,我们才能够实现呢,大家呢,从控制台这块输一个数据啊,就读到我们程序里边了,诶主要呢,还是因为C这么点印哈,它呢其实用的也是,只不过呢,我们现在用它以后啊,我再包的话呢,我就不用scanner来做了。
09:12
啊,用基本的系统来实现,好想想啊,咱们怎么去做。你看咱们用scanner的时候呢,咱们其实调用了它的一个方法,就叫做ne方法。这个方法的话呢,是不是就返回一个字串了,那你像咱们现在要用c.in的话呢。咱们得把这个用户读进去的数据都看成是个字号。把这个字符串数据判断是不是E或者是ex。我们前边涉及到过一个方法,往哪想啊。对,缓冲流里边是不是有一个叫read line读一行。哎,我们读数据就用户呢,呃,他从控制台这块呢去输入数据,一输入完以后呢,我们通常不都是回车一下嘛,一回车呢,就代表你之前输入的这一行,那一回车跑到下一行了,那这个数据呢,我们就可以获取到,其实咱们就可以考虑用这个red line把它呢,大家可以看作类似于咱们scanner当中的next方法。
10:23
那你现在呢,是不是得想办法啊,从system.in这块出发啊,一直到咱们的,呃,Buffer的reader里边那个,哎,这叫什么read line是吧,怎么就能够从system in。啊,就能一直蹦到咱们想用的,哎这个buffer的哎reader里的,哎这个叫什么read line了。嗯,你看这个呢,返回的是不是一个input stream类型啊,哎,在这就看到了。
11:00
哎,它是个input stream,这是不是一个字节流啊,这个字节流我们现在希望呢,是不是一个字符流中间呢,对,再用一下转换流,哎,对,先由它呢,咱们到这个转换流。哎,这个转换流再转一下就转到这儿了,就这样呢,套了一下。哎,那就相当于我们对于他来讲,对于他来讲,这不都叫处理轴啊,都是报他的行,那下边呢,咱们写一下这个程序啊,那那这块呢,我们就直接我上来就啊这样整有点太生猛了是吧,一点点来吧,先input stream reader。Isr这是转换流啊,又一个input stream reader,这里边controltr out斜杠需要传一个input stream,那system.in是不是就是啊,哎,那么而且呢,我们默认呢,是从控制台呢,哎,从这个键盘那输入的。
12:01
这呢就是一个转换流得到的,它呢是一个reader啊,你看我们这会呢,哎,看中它,然后呢,大家点这个F4,哎,这不它呢是一个reader嘛。是这样的啊,那接下来我们呢,使用叫八份的。Read。等于又一个buffer的reader,这里边control的斜杠需要传一个reader,那我不就是一个reader吗?哎,我就放进去。诶,那此时咱们这个buffer reader哎,其实本质上来讲,它操作的就是它了,其实上就可以从控制台呢去从咱们这个键盘呢去读入数据了啊,那接下来我们就通过这个B2呢去read烂了,当然有可能会读很多次嘛,所以我们是个while啊。这样子啊嗯,While,那这块呢,你可以把这个string声明到外面也行。哎,这个呢,是我们读入的这个具体的数据了,哎,这里边,哎data等于B2点,我们去read LA,哎看一下这个用户输入的这个数据。
13:06
现在怎么办呀?或者我们也可以这样做啊,我不这样写了,我直接再写个外处吧,就是不在这个位置,我们去控制这个循环结束,本身咱这也不是读文件的啊。咱们是不是通过这种方式来控制的,哎,所以这样啊,那这个也没有必要就给它整外边了啊,直接写里边不要处啊data大就等于B2点去read LA读这一行。二斜杠。好,读一行数据,读到这一行数据以后,我们需要看一下这一行数据是不是这个事儿啊,所以我们呢就先判断说如果哎这个叫data塔点,我们呢说叫E4也可以呢,在忽略大小写的情况下,你看看是不是这个E。或者啊,这个呢,诶德塔点啊equals ignore case忽略大小写啊是这个ex是它,那如果是这样的话呢,我们就是不是就结束啊,哎就break就完了,你也可以呢,来个友好的提示说,哎,程序结束。
14:11
这样。啊,这样来处理啊,呃,这块呢,我们多说一句,就是以前也说过这个事儿啊,这种写法呢,不是特别好啊,建议大家呢,是不是把这个字符串呢,写到前面这个data写后边,对原来说过这个问题啊,CTRLX这呢,我们CTRLV把这个位置呢,写成这个data塔,这个更好的去避免一下这个控制帧的问题。CTRLXCTRLV。好,这样去写啊,好,那如果是这样的话呢,我们就break结束了,那你要是能走到这,说明呢,你就不是一个E或者是ex,那既然不是,我们呢,需要把咱们当前拿到的这个data给它呢,转化成这个大写的,我们就to upper kiss,这个变成大写了,Out enter,这个我们就叫一个upper case吧,大写的大写呢,我们输出一下。
15:00
APP。能看懂吗?那这不就这样写吗?那这呢,就整个我们这样一个程序的过程,或者说你在这块呢,让用户有一个良好的体验呢,你再写一个输出语句啊,说请输入字符串。哎,用户呢,就在这去输入,哎输入输入输入啊,当你输入这个E或者它的时候呢,就程序结束OK完事了,最后的话呢,我们把这个相关的流呢,做一个关闭,前面也讲过了啊呃,这呢也算是一个流了,这呢也算是一个,这也算是一个,但是不用考虑那么多了,直接呢B2。对,做一个close就行。啊,那这块呢,我们这个有这个异常啊,嗯,那正常来讲,我们还得是给他用try catch finally,哎,Out shift z。如果。诶,这样呢,把我们这个扔进去,哎,加了一个拆开好这个程序呢,我们就写完了,其实还是我们讲的这个套路哈,一开始的话呢,我们去提供这个流,只不过呢,此时我们这个终点呢,不算是具体的一个file了。
16:10
啊,而是呢,就是从键盘输入这样一个操作,接下来还是一个读写的过程,最后还是留的关闭,还是这么几个过程啊没有变啊,只不过呢,里边这块呢,好像不像前面写的读到一个查形数组字节数组里面了,那行这个代码呢,咱们就写完了,写完以后的话呢,我们现在呢去跑一下啊来执行这块呢,我们是使用的单元测试。单元测试说请输入字符串,我在那儿去写,你看我这块呢,写不了。或者按键盘写不了啊,这个写不了呢,注意不是咱们这个代码有问题啊,大家呢,如果是用的eclipse的话呢,这个是没有问题的,还是可以去这个从控制台这块去读入的,这主要原因呢,是咱们这个idea呢,它在支持这个单元测试方法,从键盘输入的时候呢,它就不支持这个事儿。
17:00
所以在这块我们看他老是在这转,等着我输入,但事实上呢,我又输不进来啊,这个我就停了,怎么办呢,你别用单元测试了,对改成没方法啊,哎,把这个代码呢,我们扔到这个may里边。啊,CTRLV一下啊,下面这个大框多一个啊,删掉ctrl shift f一下。啊,写到这个may里边就OK了啊,你看这时候我们再去执行。哎,这就在这儿了,输入字符串,我写个ABC,呃,123啥的,这就都转换了啊,来随便写。行啊,当我输入一个E,哎,这不就退出了,再跑一遍输入一个ex也就出了。啊,就是这样啊,这呢就是咱们说的这样的一个例子啊,哎,关于c.in通过这个呢,咱们也提到了一下,哎,这呢是一个字节流,那在有些情况下呢,确实我们想用这个流的话呢,那还真得用一下转换流。
18:02
啊,那需要让他呢,在中间起到这样一个中介的作用啊好,那这个题目呢,咱们就讲完了,那这个讲完了,哎,这个题目完了以后,这个咱们课后呢,你看我这有一个这个练习。哎,有个这个练习,这个练习的话呢,这是我从一个英文的一个这个这个呃,一些这个文件当中找到的啊,所以我直接就粘过来,没有给你翻译,看你会不会翻译create program name的,叫这个名说呢,Contain包括一些方法用于读int double float或shot be and strain values from the keyboard怎么着啊。对,就是让你写一个程序哈,让这个程序呢,叫这个名啊,你这个程序里边呢,包含了很多的方法,呃,用于什么呢?从我们的键盘去读入,呃,Int呀,Double啊这样这样的一些类型的值。
19:11
哎,就这个事儿说完以后还是有点迷糊是吧。其实呢,就相当于让我们造一个类,这个类呢,就类似于咱们之前的scanner。你看咱们scanner的话呢,诶,我这个类造好了,这实际上是给我们提供现成了啊,有了这个类以后,我们造一个当前类的对象,我呢想要一个int,我就调next int,我想要一个字符串,我就调next的方法。这块呢,不就相当于让我们造个类,诶你呢想从键盘获取什么值,我呢就直接调相应的方法,其实呢,就相当于让你造一个类似于scanner的一个类。啊,类似于SC这个类,有同学说这好办,我就这样写。My input写个scanner,你要调read string呢,我就调s.next。
20:01
啊,你要调next,呃,这个这个什么读一个int呢,我就调scanner.next in笑了啊,是不是有点骗人啊。有的还没明白了哈,不能这样写吧?看看懂了吧。就是让咱们造一个scanner,不是让你把它包起来骗人的,然后你举个例子啊,就比如说咱们以前国家不是出过这个事吗?就是这个美国呢,这个原来这个CPU这不是都是人家咱用的这个人家外国的啊,后来我就不知道哪个学校了啊,说了好像不大好,这个学校这个教授,然后呢,就把这个诶应该是摩托罗拉的啊CPU呢买过来,本来呢,就是相当于人家是造CPU的啊,处理器咱呢,就想自己也造个处理器,就相当于人家是scanner,咱现在想写个叫卖put,实际上自己呢重新的去造一个啊呃,做个CPU,那他不这样,他就把这个CPU呢买过来以后,这个拿了国家应该是上亿的这个这个科研经费啊,然后就做了一个事儿,找了一个这个工人从路边找了一个,把了一个摩托罗罗拉的这个标识呢,给它打磨掉是吧,就换成他的这个标啊,结果呢,就提交上去了,说呢就是有自主这个呃,生产CPU的这个能力了,那后来被发现以后废了啊,对学校影响其实还很大啊,这还是咱们国家。
21:22
非常好的一所高校啊,影响很恶劣,那其实就类似于这个事儿,说呢,让你造一个,呃,类似于scanner,一个类叫my input,结果呢,你又把scanner给包了一下啊,本质上其实还是人家的scanner,这不行啊。那用谁呢?你可以考虑用system.in。当然呢,需要你自己呢,别用scanner,自己呢去处理system in。怎么着?你看我们刚才,咱们刚才这块做了个什么事啊。咱们是不是可以从控制台读读这个任意的字符串了,我我读什么字符串这块呢,相当于不就获取到这个字符串了。
22:08
字符串也能获取了,那我现在想读一个123,这个123在咱们这个程序当中看做的还是一个string。那你能让他看成是一个int吗?对,咱们不是讲过string和基本数据类型的转换吗?思路有了吧。差不多就出来了。其实。嗯,对这个呢,就是对点到即止了啊,就是呃,不是所有的这个练习呢,我都亲自去写了,就是让大家呢,诶知道我们基本的题目什么样,以后呢多见见这个,呃,就这个新的一些题型哈,其实里边这个本质上呢都是类似的啊这块呢,我们这个写这个的话,我就直接粘到这儿了啊。啊叫my input我就不写了,直接呢打开好大家看,不就是让我们写个类,这个类的话呢,可以去读字符串,诶可以去读其他的int呀,或者是double啊等等不同的数据类型,我们呢,先来写去读一个。
23:11
然后这个操作咱们刚才其实做过。刚才不就是这样写的嘛,嗯,然后呢,得到这个B2以后呢,我去read LA,这呢不就相当于得到一个字符串吗?字符串能得到了,接着呢,你要去读一个int,我就把你这个字符串呢调地点pass int转化成一个int就完了。哎,这个呢,下边也都类似。当然了,转换过程当中可能会出异常。那出就出了,谁让你输入的不是一个,比如说我们这我调这个方法,你非得写一个ABC,那肯定会爆异常。咱们scanner不,你不也会报吗?Scanner我要一个next in呢,你写了一个ABC,那不也报一样啊,诶,那这个题目呢,其实就是这样来做啊。
24:01
哎,其实这里边儿核心的代码,咱们刚才呢,通过这个练习呢,也讲过了啊,通过咱们刚才写的这个题目。那这个啊。行,那这样话呢,我们就把这个标准的输入,输入流呢就讲完了,哎,大家呢,了解一下就行啊,不用去深究。
我来说两句