00:00
好,那么对象流说完之后呢,咱们这一章呢,涉及到比较重要的几个流呢,咱们就告一段落了啊最后这块呢,还有一个0606呢,就说一下这个其他流的使用这块呢,大家做一个了解就可以了,这个呢叫标准的输入输出流,这个我们前面讲这个常用类的时候呢,提到过这个system system里边呢,不是有两个属性吗。啊,一个呢,就是对应我们这个system下面有一个叫in,啊一个呢是system下面有个叫。对,它俩呢,对应的就我们所说的叫标准的输入和输入流,这个点E呢,就是我们说的叫标准的输入流。诶怎么叫标准输入流呢,我们说默认呢,就是从键盘输入是吧,就是它,然后这个二的话呢,就叫标准的叫输出流。这个我们说默认呢,是从,哎,从这个显示器。啊,从这个显示器输出。啊,那这个显示器输出的话呢,其实我们也可以理解成呢,就是控制台输出啊。
01:01
行,这呢就我们说的这样的一个场景啊,这呢,我们如果看这个API文档的话呢,也能够看到这样一个点啊,找到我们这个index啊,这呢我们就输入一下这个叫system。哎,没问题啊进来,哎这呢就写着了啊,哎其那么点啊,标准的输入流out,标准的输出流,然后这块我们也关心一下它对应的这个类型啊input stream,哎这个print stream这个呢,其实是个打印流了,打印就我们下边呢要说的这个流啊,一会再说。好,这个呢叫in,这个呢叫alt,然后呢,我们还可以呢,通过方法呢,去修改它的输入流的这个位置和输入流的位置啊,所以这块我们可以通过呃,调用如下的这个方法呢,就要修改这个输入流和输出流的位置。啊,你比如说我们在这个system这里边儿呢,有set in这样方法,Set in的话呢,你就可以传一个新的一个叫input stream,这呢就相当于是把我们这个值呢,就给改了,改是吧。
02:00
然后呢,相对呢,你还有这个叫set out嘛,在这呢,我们就指定一个新的叫print stream嘛。啊,这块呢,就把我们这个out的位置呢,也可以给改一下子。哎,就是这个场景好,回到我们这个API文档这块呢,比如我们下边看一看啊,这个我们叫set一个in是不是它嘛,Set一个out就是重新的指定,我们就是你要这块呢,改完以后呢,我们再去调c.in的话呢,它默认就不是从键盘数了。啊,这个c.out.line咱们回头就看到在这块就打印了,但是你要是把这块呢,重新的改成另外一个新的打印的位置了,就改到某一个文件里了,这是我们再去调c.out.printline的时候呢,就不会在我们这个控制台去输出了。所以呢,这就是一个修改的行为啊。好,这个说完以后的话呢,当然呢,你看这样一个特点,这种我们可以通过这源码呢,比如来看吧。你看这个system是吧。那就是有可能呢,他在笔试的时候可能会恶心你一下啊,问一问你啊问问你的话呢,还不一定呢,有同学会什么意思,你看咱们刚才是不是说c.in呢。啊,在这个是不是说的就是他。
03:01
你会发现他这个in呢,它加了一个final啊。Final意思不就是敞亮的意思吗?常量的话呢,我们说呢,前面负值要么显示负值。啊,这个当然呢,还是静态了,你就别考虑构造这个这个构造器赋值了,除了显示赋值之外呢,还有一个静态代码块赋值是吧?当然呢,这块明显的它已经写成no了,就相当于呢,把这个值显示呢,就复成个闹了,它竟然是个闹啊。他既然是个no,然后呢,我们这块呢,既然相互的调用呢,还没问题,另外的话呢,既然它是一个final的了,怎么还会有这个对应的set方法呢。是不是有这样的问题啊?啊,咱们讲的常量的话呢,你就不能够去修改对吧,包括呢,我们这个out呢也是一样,它呢也加了一个final的修饰。啊,所以说这块呢,既然是个常量了,那怎么还能改呢,这块我们看一看它所谓的这个改的这个操作哈,CTRL f12,比如我们就看一下这个叫set in吧。诶这个操的话呢,你调这个,他把这个音呢,不就传到这里边了嘛,然后再点你发现呢,这是一个native的一个方法,包括呢,这个赛道呢,也会调这样一个方法,也是一个native的方法,这呢就是我们底层呢,要调这个C或C加加编写的相关的这个代码了。
04:09
啊,这个事儿呢,我们怎么去解释呢?哎,包括呢,我们看到呢,在刚才这个声明里边呢,他这儿呢,用的也不是这个,咱们说呢,常量应该用大写了,他这也没有用大写,主要用呢,就是它其实呃,也不是我们所谓的这种常量了,在Java这个代码层面呢,我们不要呢去给他去修改这个值。但是呢,底层因为你调这个C和C加加了,实际上呢,呃,我们说还可以去改它的值,主要原因呢,就是因为我们这里边儿这个操作呢,底层调的是C和C加加。通过C和C加加这个层面呢,我们去改它的值。但是在这个Java代码层面呢,我们就不要去改了。说白了就是,呃,你要想改,你就得调这样的方法。啊,这个小细节呢,大家注意一下就可以了。这呢,就是标准的输入流,标准的输出流。啊,这个其实不是特别难啊,然后对应的咱们这个,呃,课后这块呢,还有相关的这个题目我们看一下啊。哎,标准的输入流这块,你看有一个这样的题,这个题呢,我们就不写了,咱们就直接粘过来呢,大家看一下就行啊,CTRLCL一下。
05:06
好,回过来这块,我们去新建一个文件。啊,咱们就称为呢,叫other stream的一个测试。第一个啊。好这呢,我们把它呢就粘过来看这个需求说呢,从键盘呢输入字符串,要求呢,将读取到的整行字符串呢转化成大写输出。然后呢,继续呢,进行输入操作,直到你输入的是一个E或者叫X的时候呢,我们就退出当前的程序。OK啊,这个咱们就不直接写了,咱拿过来看一下对应的代码,从这到这儿啊,CTRLC。咱们就剖析一下就行。看一下啊。好,这里边儿呢,因为涉及到呢,我们是从这个键盘读入数据,从键盘读入数据呢,可能大家第一反应呢,就使用这个scanner了是吧。哎,我们说呀,其实你也可以不用scanner,咱们这一章的话呢,讲的就是这个流c.in的话呢,表示的就是从前面输入了,咱们scanner的话呢,500户也是包了一下c.in。
06:06
那我们就可以呢,使用咱们现有讲的这样的一些流了,比如说c in呢,它返回值呢是input stream是一个字节流。而我们这个buff reader呢,它正好不是可以读一行吗?我就想用这样一个流去read烂啊,那它是个字符流,这呢是个字节流,我们中间得转换一下。所以呢,我们就用了一个叫input stream reader,把一个字节流转化成是一个字符流。OK,那这时候呢,我们就可以再去调这个叫read line这样个方法,然后呢,只要你这块输入的啊,它不是一个no,我们就得到了你对应的这个数据了,这个数据呢,我们就把它转换成大写,然后呢,诶system叫out,默认呢就是输入到我们这个。控制台上是吧。然后line呢,我们在控制台上就显示这样的信息了。啊,这都没问题,然后呢,如果你再去读,只要你写的是一个E或者叫X的时候呢,我们就退出当前这个循环。然后最后呢,就是哎,处理一下流的关闭就行了。
07:00
啊,体会一下,我们这里边有个system in,这呢有这个out这样一个场景,来走起。好,这个呢,我们又来一个叫ABC是吧,这就转化成大写了,哎,Hello,来一个123是吧,哎,就这样个情况。那这里边儿呢,如果你写一个汉字的话呢,这个汉字呢,去转换成大写不受影响啊,原封不动的把它再输出出来就行。哎,这块呢,我们一写个E啊,一回车这就结束了。就是这个题这里边儿这个新的知识点的话呢,是有这个。哎,大家呢,可能是没有见过是吧。那这个大家注意一下就行好,这个完了以后的话呢,这块课后呢,还有一道题,这个呢大家啊看一下啊,这个练习呢,是这样说的。啊,是个英文描绘的啊,说呢创建一个程序呢,命名为叫MY啊input.java说它呢包含方法,用于读取int double float布shot BAT和string,前面呢,这就属于基本数据类型,还有string。
08:00
从键盘上来读。啊,这个翻译正常来讲应该是写这样一个程序,然后包含一系列方法,用于从键盘读取这样一些类型的数据。哎,大家可能想说,这不就scanner吗?是这意思吧,对这块的话呢,就是你不能用SC,说白了就让你造一个类似于scner这样的一个类一样。你说那也挺简单,我就这里边呢,我就包一下,我就用scanner。哈哈。这不行了,这就还是人家了哈。就跟咱们说咱国家有一些这个一开始的这种所谓的创新型的企业一样。啊,最早的话呢,其实这都大家可能都不知道了,很早的时候呢。就是咱们上海的啊,某某交大是吧。啊,这个有一个教授是吧,说这个把中国的这个芯片当时坑了,真坑惨了都是吧。对,给了他很大的很多的这个钱啊,然后呢,他就拿着这个应该是摩托罗拉的这个芯片,找两个工人把这个摩托罗拉这个标给打掉了是吧,然后打上他自己这个标,比如说咱们中国自研的芯片。
09:04
这坑了不少人啊。当时。啊,这个至今呢,不知道是什么情况了啊,然后呢,就类似于这样的场景,这是不行的啊,这个呢,说白了就是让你造一个这样的类呢,它呢得啊跟我们这个功能是一样的,你不能让把它包装一下哈,这是没有意义的。就说现在到安卓的系统,操作系统,你不能在这块呢,再包一下整一套皮肤是吧。整套UI,你说这是一个新的操作系统了,那不行。OK啊。米I,人家确实也没说自己是这个操作系统是吧?OK啊对,当然有好多呢,都是要OS,这个都是有点骗人的啊。什么这个OS啊是吧,其实呢,就是还是你这个安卓的OS啊。好,这个呢,我们怎么去做呢。洋洋。啊,这个呢,咱们这个看看这个思路就行了啊怎么做呢,你看刚才呢,我们写这个程序的时候呢,其实就提供了一个想法。我们这样包完之后,我是不是呢,就使用这个buffer的reader,可以从键盘去读字符串了。
10:04
哎,那么读字符串的操作是不是就搞定了。这样不就可以吗?啊另呢,就是看我们要是读立个串这个事儿的话呢,我就就想这边啊,诶在当前这个类里边呢,我们要read string嘛,然后呢,我就先把这样一个结构呢还拿过来,然后呢它呢直接read烂,那么返回的这个不就是我们要从键盘读的这个字符串吗。那串这个操作搞定了,那其他类型呢。对,咱们讲过这个string和其他类型之间转换啊,是吧,所以说其他这个我想从前面读一个int类型,那你就还是用读字符串这个事儿,只不过呢,你读过来以后呢,把它转换成是一个int就得了。说这块我要万一写这个ABC呢,ABC那块就转不过去,就报number for me except呗。咱们以前写SC的时候,它不是报叫input mismatch exception是吧,这呢,我们报道叫诶number for mid exception类似写ABC肯定不能转成in呀。OK啊,所以下边呢,都是一个转换就可以了。
11:03
啊,这呢说一下这个思路就行好,然后第二个这流呢,叫做打印流,打印流的话呢,其实我们从第一天呢就开始接触了。只不过呢,第一天我们没没有明确的把这个事儿呢,给它抛出来,就是我们在c.out的时候呢,这个out就是一个打印流,然后呢,我们再去点,咱们呢接下来说print line啊,其实呢,你调的这个方法呢,都是我们这个打印流里边的这些方法。啊,这不都在这儿了吗?哎,然后呢,你要是不跨行的,是不是都是我们上面的这样一些方法。哎,这个就是我们这个打印流的一个使用场景,其实啊。好,然后这块的话呢,我们也有一个对应的这个例子呢,咱们可以去熟悉一下了。呃,这个呢是比较清晰的。啊,我们就先把这个呢,比如拿过来啊CTRLC。诶,拿过来在这儿。哎,咱们写一个啊T2。好粘过来啊,这个呢,相应的它比如说有异常,我们就给它抛出去了啊好这块的话呢,我们是把它呢对应到一个文件叫io.t啊,就是我们在这个下边了啊,现在呢,我往里边呢去写个哈,写个一写个1.5关闭了没问题啊好,我们这块呢做一个re。
12:12
那此时这个数据呢,是不是就写到我们这个文件里了。哎,这个IO打开是不是它呀。哎,没问题,好这块要清楚以后呢,你看啊,我做了一个这样的事儿,咱们呢,刚才说了这个system点。Out了是吧?System的话呢,是不是有个方法叫set out。再到把这我给放进去了。相当于呢,我们重新的修改了一下它输出的位置了。进而我们在。System。哎,点out点我再去做一个print,我写一个说你好。哎,你说这个数据写哪儿了?数据写到这里了。哎,对的啊,你看我们再去转,这时候在我们控制台这块就不会出东西了。啊,这个呢,我们再打开这个文件,你看一下。没有啊。啊,这个呢,我们把它改一下。
13:02
改成一个。嗯。哈喽。艾特硅谷啊。来,我们再走起。哎,没拉是吧,然后这块我们把这个打开。还没有是吧。还没有去哪儿了?这个是不是应该整这儿啊。CTRLX啊,得整这吧。哎,这个位置呢,咱们得已经给它关了啊,这个你往往写是不是写不出去了。就尴尬了啊,跟写这个中英文其实没关系是吧。那这个来一个你好。这样啊,来,走起。啊,这块肯定有。这要再没有就有问题了是吧。嗯,OK啊行比关了你肯定就写不出去了啊这呢就大家能够理解一下,我们可以呢把这个打印流呢,诶重新呢,对于我们c.out呢,做一个设置啊这样个场景,好这个完了以后呢,下边这有一道题,这个呢也是大家就看一下就行。
14:00
就是相当于呢,平时我们一些写法呢,在这儿呢,你发现有一些变化啊。啊,这咱们写个四吧。三是吧。好,CTRLV粘过来,你看这个题是什么意思啊。把这个收起来。呃,这的话呢,我们指定一个叫fileop stream,它对应一个文件呢,在D盘IO下叫test.t。这个IO的这个文件目录的话呢,我们得有。啊,回过来我看一眼啊。哎,这个呢是有的啊,没问题啊好回来这个呢,因为咱们在Windows操作系统下呢,不区分大小写了,所以我这写成大写的没关系啊。嗯,这个文件的话呢,有没有都没关系,反正你要有我们也是覆盖啊。嗯,然后呢,下边我们这呢,是把这个嗯,OS呢封装到我们这个print stream里边了,这个呢,就表示自动刷新的一个意思了。好,刚才要不是闹的话呢,我们做一个设置。然后呢,设置完以后,我们呢,接着从一到255这块呢打印,然后当时诶50的这个倍数的时候呢,我们就换行了,哎,如果呢,没有我们上边的这样的一些操作的话,比如我把这些呢先注释掉啊。
15:08
然后把下边的这些呢,咱们也注释掉,这个呢,就是一个普通的我们去打印,这时候打印呢,就是打印到控制台上了。我们run一下。哎,这不就到这儿了吗?哎,到这儿的话呢,这个其实我们就相当于打印一下我们这个X码啊,X码这不是从这个abcd这块呢,这是小写的,这是这个数字的这些前面这个呢,它是空出来的啊,没有是吧,所以呢,你看着好像像乱码一样,其实也不是啊。好这呢,就我们直接打印到控制台上了,那如果说呢,我们诶去调一个叫set out,那这块提前你把这个打印流呢给提供一下。哎,这就提供出来了啊,然后呢,最后呢,你再把这个相应的一些异常啊处理一下,包括呢这个流呢,给它关一下这样的行为,那此时我们要再去做一个入执行。这个数据的话呢,相当于是不是就写到这个文件里了。啊,就相当于你以后呢,再去STEM out这个数据呢,都不会到控制台上,而是到我们这个位置了。
16:04
啊,没问题啊行,然后呢,借助这样的一个想法,你想原来呢,我们要是光想输出就到这儿,这儿的数据呢,其实算是临时的了。那你要是呢,把它重新设置一个al的位置呢,我们就可以把它保存在一个文件里了。这个时候我们可以做什么事呢?哎,这个下边呢,我们就这写了一个啊,可以自定义一个日志的一个工具。啊,这个大家做一个了解就行,来,我们把这个事儿呢,可以粘过来,大家看看就行,其实也不难。比如说哎,我们在当前的这个包下呢,咱们创建当前这样的一个类,这个叫log是吧。啊,用来处理这个处理这个日志的啊,然后这个类的话呢,我们声明了一个方法。一下。诶,我就呢先粘过来了,细节呢,咱们先不用去细看啊,然后接下来我们下边有个对应的这样的一个测试。啊,这个回到咱们这儿啊,还在这去写啊。给我们写一个四。CTRLV一下粘过来。
17:01
这个呢,是测试我们这个自定义的这个日志类啊。好,你看回过来,我们先看看这个类我们都是怎么做的,咱们把它呢,先导入一下啊,比如说就是这个U下的。这样来做的,这呢,我们这个log里边呢,就写这个message,这个message的话呢,首先我们创建了一个打印,打印到这个文件里了。这呢是自动的去往后添加的一个行为,这不是他的一个参数吗。OK啊行,就是说这个文件呢,如果要是已经存在的话呢,我们不要去覆盖它,而是在这个文件的末尾呢,继续添加这个咱们前面说过了啊,然后这个打印流的话呢,我们重重新置一下这个C点,这个out这个位置,哎,这呢就使得我们回头再调用的时候呢。哎,这个我们还得看这啊,在我们去调用的这个时候啊,实际上呢,就是把它写作这个文件里了。然后你想哎,这个保存一个什么样的日志信息呢,就是我们这个message,然后保存这个日志信息呢,通常前面我们会保留一个时间。所以呢,我们就先用了一个这个date的对象,这个呢是它的一个默认格式,感觉呢不太友好,所以我们就使用一下这个SIM data form,按照这种格式呢,做了一个格式化。
18:08
然后把得到这个字符串呢放到这儿,然后呢,这个呢,就是你想记录这个日志的这个信息,然后呢,我们做了一个print line,这个line的话呢,因为你重新设置过这个out,其实呢,就保存在我们这个文件里了。没问题吧?好,那么在我们具体呢,开发当中,我们就可以使用这样一个工具类,比如说我们想哎,做了一些什么操作了啊,我这块呢,就记录一下这个日志,说那我做了做了做了什么事,然后你又在某一个位置呢,诶,我又记录一下,说我做了个什么事儿,做了个什么事儿,好那么这个数据的话呢,当你去运行这个程序的时候呢,这个日志信息啊,就自动的保留在了我们刚才调的这个方法里边的这个文件里了。然后你打开我们这个log呢,它就有。什么时间你做了什么事?就记录了,那又由于呢,我们这边是一个openend的这个行为,就意味着我现在如果要是再去调用一下的话呢,它会在我们现有的这个位置的基础上呢,再去openend是吧。
19:01
啊,这块我们又调了一下,所以你再看这个log呢,这不后边又补了一套嘛。诶然后呢,你诶这块呢,这个日志信息不断的去记录我们这个文件呢,就会越来越大,当程序呢,出问题了,你回来你看日志啊,说你之前在什么时间都做过什么事,在哪块呢,出的这个错误的信息,包括一些错误的信息,比如说我们这个exception这个信息呢,你也可以呢,记录到我们这个里边。看他打印的是什么样的错误信息,这块就翻那个日志文件就可以了,他呢因为是一个保存在文件中的,就是持久化的了。哎,方便呢,你后期呢再来查看那就行啊,OK,行这呢,就我们说的这样的一个,呃,简单的小的应用啊。哎,好,这个就过了啊,然后下边这个关于scanner的话呢,就不用多说了啊,因为咱们用的时候呢,呃,用过这个c in是吧。这个稍微注意一下的话呢,就是关于它呢,记得最后呢,给它做一个close关闭。这样一个行为,好,这是一个了,然后再往下呢,这个咱们提到这样一个包,这呢大家也是做一个了解啊,这一章呢,咱们要讲的这些流啊就告一段落了,那我们会发现呢,在实际开发当中,流呢,咱们讲的这块呢,嗯也不少,但是呢,你发现它处理的这个逻辑呢,都差不太多。
20:07
那代码量呢,按说也不小,但是呢,这个重复率呢挺高的,所以呢,我们能不能这个有一些现成的一些API呢,直接来调这个呢,在我们JDK的API里边就没有了,第三方的我们提供了一些这样的API。呃,所有的第三方呢,就是不是Oracle的这个JDK也不是咱们自己写的,呃,其他呢,都叫做第三方,呃,阿帕奇软件基金会下边其实有好多开源的一些炸包,我们可以直接来调的啊,这个炸包。就是咱们Java源源代码编译以后呢,生成的叫磁解码文件对吧。这个自源码文件呢,给大家打包以后呢,其实生成的就是这个账包。像咱们前面用的这个几unit的单元测试。啊,比如在这块看到的。哎,像这个这不都是一些这个炸包吗。诶里边呢,你看这都是这个这是吧,然后呢,你再点开,诶我们都能看到它相关的一些具体的类叫什么了,那下边都有这个呢,其实都是自解码文件,只不过ID呢,它做了一个反编译呢,所以打开你似乎能看是吧。
21:06
就这意思啊好,那这里边的话呢,就提供了一些相关的这种叫炸包了哈,我们看下这个第15章这呢就放在它啊,然后这呢是放了一个图片,这个图片里边呢,其实就提供了很多的这样的一些操作了,比如说我们前面呢讲过这个string呢呢,在GDK当中给我们提供的都是一些非常基础的一些方法了,你要是具体在项目当中有一些相关的一些诉求,你可以呢调他这里边的现成的一些方法去用。OK啊,哎,这个能看都比较多一些,包括你看还有数组相关的是吧。好,这里边呢,我们就可以说一下关于我们IO流相关的这样的一个扎包了,这呢我上面放了一个叫commons IO点2.5打开以后,这呢你看就是一个包。啊,这个炸包好,然后上面这个炸包呢,就是我们相关的这个API了啊,把它呢,CTRLC一下怎么用呢?啊这个咱们以后呢,在后续阶段当中都会见到这样的场景的。
22:00
哎,咱们呢,用unit的时候啊,单元测试方法的时候呢,我们讲了一种用法,实际上呢,就是大家通过在这个位置呢,我们去添加了一个library是吧。这呢,实际上是一种方式了。啊,咱们当然讲这种方式呢,是因为咱们每天呢,都有不同的这个Mo去使用,所以每天呢,我们就只需要呢,在这个位置呢,呃,点一个这种添加的就可以了。这种方式呢,比较简单一些啊,但其实呢,我们说还有一种在当前的module当中,使用某一个炸包的方式,来通过这个来演示一下啊,在当前这个module下呢,我们可以右键。我去新建一个directory。一般的习惯上呢,我们都叫做这个lib或者叫lab也行,其实它就是个library的一个简写是吧。诶,就它那个简写叫leave了啊,你要是说表明这里边可能有很多的这个第三方的一些炸包加个S呢也行。啊,这个都OK啊,然后呢,在这个下边呢,我CTRLV一下,把刚才呢,咱们复制过来的这个炸包呢,我就放在这儿了。就搁这了,注意你看搁这儿以后呢,它跟咱们现在这个呢,长得不太一样啊。
23:05
这个话呢,你看我们把它呢,点开这个点开。它这块你看有一个这个尖是吧,就是它里边这个API呢,我们可以继续往下看,而目前这个呢,你看不了,怎么着呢,右键一下。对,这块有个叫as。诶点一下这个呢,针对咱们当前的model,我OK一下哎就过来了,这个时候你再看下边的API呢,就都有了。这个呢,咱们可以在形象的举个例子,比如我这块呢,要是没有刚才那个ADD as library的话呢,就好比说啊,你去这个。啊,比如说你去这个啊,百度的这个门前拍了一张照片,你说呢,我到百度了。是吧,这个你说所谓的到百度呢,也只是到这个百度的门口了。不是说呢,你入职百度了是吧?诶当你这块点一个叫ADD as library以后呢,就整个呢,在我们这个model中就可以使用了啊,你可以理解成就是你是入职到百度里边了。啊,可以呢,在相关的程序当中去使用啊,你可以跟一些同事有交互是吧。
24:03
好,这个呢,我们添加完以后的话呢,这里边儿的API呢,咱们就可以使用。哎,类似这样的思路的话呢,大家你也可以怎么着呢,咱们当时呢,讲这个解用的单元测试的时候,其实你也可以这样做啊,咱们这边不是有这个软件。啊,有这个。啊,不是这了啊,用我们这个need是吧,把它俩。你CTRLC一下。是不是你也可以呢,CTRLV转过来呀。对吧,那整过来以后呢,你把它俩一选中,也可以叫at as library。那你也可以在咱们这个代码里边就写这个单元测试了。啊,但是咱们原来没讲这种方式,因为咱们每一个model都要用,每一个都这样添加,不显得比较重吗。所以咱们选用的是诶讲过的那种方式啊,这个我们就没有用这种方式了。好,这个呢,过来以后,它里边呢,有一个类,咱们就举个例子让大家感受一下就行啊,这个类呢叫fair是吧。这个类里边定义很多方法啊,咱们就来演示一下。
25:00
啊,关于他这个第三方给我们提供好以后呢,我们就用起来很方便了,比如说呢,我们现在呢,想复制。啊,一个图片。啊,以前的时候呢,我们得自己呢去写这个文件,自己呢去写这个流,现在的话呢,它有这样的一个叫file这样的工具类,它直接呢有个方法就叫做copy file。诶这块呢,需要传两个file,那体现了你造好就file s RC的一个file,这呢我们就还拿咱们这个图片呢,比如来说吧。你看这个图片是吧,好CTRLC一下直接呢,我们就粘过来。然后呢,我们再指定一个目标的。这个得扭一下是吧。哎,这么着,然后呢,再复制一份。那这个我们叫哎勒,这个我们下划线啊copy。来一个二吧。好,然后呢,你把这个原文件的这个位置,还有我们要复制到的这个文件的一个位置。拷贝过来。哎,然后这块有异常,那我们这块呢,给大家再去,诶抛出去一下啊,哎,这块我们就写个叫哎复制成功。
26:06
哎,就完事了啊,来,我们走起看一下啊。嗯,搞定了,然后这时候的话呢,你看这块就多了一个这样的一个文件了,一打开没问题啊,这是原文件。所以呢,就不用我们自己写了。啊,就是这个第三方提供的这样一个工具的好处啊,哎,那如果说你是看一看它的源码怎么做的呢,一点开啊,然后这块还注意,那这时候的话呢,我们看它实际上是一个反编译的是吧。所以呢,这里边儿你看不到相关的这个注释信息。啊,你说也无所谓啊,无所谓,那你就这块点就行了啊,再点啊在这里边儿呢,你会看到相关的这个信息,这信息的话呢,其实多少差点意思啊,你说我想看一下这个源码它到底怎么写的,这时候呢,毕竟是一个反编译嘛,源码咋写的呢,还回到我们刚才的这个位置啊。找到我们的这个第15章。哎,这不这儿吗。哎,这呢,是不是有个src啊。这呢,就是它里边这个源码。啊,那怎么办呢?我得关联一下就行了,回过来在我们这个idea这块呢,你看它有一个,它有download,这个叫叫choose sources,就是选择一下这个源码的位置,我们点它呗。
27:09
这块你就去找。啊,找我这块放哪了,我这个是在桌面上,那桌面呢,是放在一个咱们课件的快捷键啊,看不到了,哎,那我就找一下在我这个D盘的这个路径下放着呢。嗯,咱们在这是吧。嗯,这个里边,然后第15章,然后呢,在这个位置,哎,是不是他呀。好,选中以后呢,你OK。啊,这个能点OK。可你看这时候我们看到就是实打实的这个源码了,诶所以呢,我们在这个反编译以后的这个点文件里边没有这些注释信息源码呢,就有了。好,那再过来以后,这里边儿呢,大家啊,本身上又掉这个方法了,你再点进来,这不就我们熟悉的这两个流就看到了吗。OK啊对,相当于呢,就对我们现有的咱们使用的这个基本的这些流的一个封装。行,那以后的话呢,我们在开发当中,实际上有很多第三方的一些大包啊,或者一些库啊,是吧,或者一些框架啊,我们可以去使用,哎,到时候呢,都会去啊,一个个去讲,会去添加啊行,咱们这一章呢,讲完之后呢,大家需要呢,就是掌握的点呢,就是可能一些具体的流呢,大家不需要去写,但是呢,基本上这个流的这个思路。
28:18
是吧,你需要呢,要清楚,比如说诶我们都有一个文件这样一个概念啊,那以后的话呢,我们可能说可能说呢,不是一个具体文件了,可能就是网络的一个节点啊,那把这个节点上呢,我们做一个流,把这个数据呢,这个读入进来,或者叫写出去啊,然后呢,在内存当中,我们通过数组的方式呢,去处理这个整个的逻辑思维呢,思路它是固定的,是不变的。啊,具体你要用的流呢,可能是不一样的。OK啊行,这个呢,就是我们整个这一章的一个内容,好,那么关于L流这一章呢,咱们就告一段落了啊,然后呢,咱们做一个复习啊,回到我们这个复习的这个位置,哎,打开我们这个啊第15章。好,这章的话呢,我们其实比较明确的啊,就讲了这样几个问题啊,第一个呢,关于这个叫file类的使用。
29:05
哎,这是它啊,然后呢,第二个呢,我们可以理解成叫IO流的一个概述啊。哎,然后呢,第三个这块我们就开始讲一些具体的流了,那首先的话呢,我们提了叫节点流。支是吧,这我们讲的叫文件流。就涉及到有四个文件流,OK,然后呢,接着我们再来第四个点。下边的话呢,我们就开始来讲具体的这个叫处理流了。哎,处理流之啊先之一吧,我们讲的叫缓冲流。然后呢,诶触流这。这个我们讲了一个叫转换流。然后接着。哎,处理流,哎,这是三啊,这个我们说了一个叫对象流是吧。然后第七个啊,就是其他流的使用。诶这呢,我们就主要呢讲了这样几个内容啊,OK,从上往下呢,我们稍微的捋一下,第一个呢,我们提到叫file类的一个使用啊,为什么要讲它呢?因为留着这个端点呢,你得是一个具体的文件了,哎,所以我们才讲到它啊,所以这块呢,我们首先提到说这个file这个类的一个实例。
30:17
那就对应着。哎,我说呢,磁盘上的。呃,一个文件啊,或者叫文件目录,诶通过这个呢角度来讲,大家呢,再去体会一下。前面咱们讲面向对象的时候呢,提到叫万事万物皆对象啊。诶,怎么叫万事万物接对象呢?呃,其实也没有什么理论的,你就是呢,去解释一下怎么体现这个接对象的概念,就是在我们Java来看的话呢,我们都得有这个类的概念,然后呢,这个类呢,我们去创建一个一个的对象,完成我们相关的功能,就是调方法的事儿了,那么这时候怎么去体现这个万事万物都是这种类的这种概念呢?你比如说我们现在的磁盘中有个文件了。你现在想把这个数据呢写出到这个文件里,或者呢,想把这个文件数据呢读到内存当中,那这个物理磁盘上的文件在我们Java看来就是一个类的一个对象了,哎,是哪个类呢?我们就用file类呢去充当。
31:12
哎,这呢,就体现了这样一个概念。包括呢,前面我们讲的这个异常,哎说呢,你腾讯的出现问题了,说抛了一个异常啊,异常的话呢,在我们Java来看,你也得是个对象。所以呢,就是异常类的对象。诶后边的话呢,我们下一章还要讲这个,比如说IP。是吧,具体一个IP地址,这IP地址的话呢,说一个具体的一个地址,但是在我们Java来看,你也得是某一个类的对象。啊,网络中的一个资源啊,我们说的一个UR一个地址是吧,网络中这个资源呢,用UR呢,用特定格式的一个结构来表示的,然后在我们Java看来呢,你也得是某一个类的对象。所以呢,就体现了就是万事万物都得是对象这样一个场景。包括呢,我们前面讲跟数据库交互的时候呢,咱们讲这个泛型的时候,还提到这个OM的这种思想,还记得吗。哎,讲发型的时候。
32:02
啊同学已经有点忘了是吧,讲发言的时候呢,我们讲到一个什么那个DA的事儿啊。哎,在这我举的哈。这个do,然后do的这块呢,我们说呢,叫这叫呃数据或叫数据库访问对象,然后呢,我们当时呢,不是提供了一个,比如这customer在这写的叫OM的这个思想。放在我们数据库当中,一个表对应我们账号中一个类,表中呢很多记录,每一条记录呢,就是相当于一个对象了。通过这个角度来讲呢,是不是也能体现叫万事万物皆对象呀?啊,就是我们现在已经跟其他的这种载体去接这个交互了,比如说数据库的这两个载体,数据库里边呢,人家就是一个一个的,库里边儿呢,就一个一个的表里边儿呢,是一条一条的这个record record叫记录,但我们现在要操作这个表,实际上呢,我们也可以理解成就是咱们操作内存层面的一个一个的对象了。我让这个表跟我们这个类对应,然后表中的这一条记录呢,跟我们类中的一个对象对应,这上又是匹配上了啊,也可以理解成叫万事万物皆对象的一个例子了。那以后呢,我们可能还会跟这个前端的去做一些交互。
33:03
比如说像这个安卓的话呢,咱们看到页面当中这是一个按钮是吧,这呢是一个可输入的一个文本框啊等等这样一些结构,然后呢,这些结构呢,诶在安卓这块呢,他用的是这种叉L这种语言来表示的啊。啊,不像浏览器呢,用的是H啊,这个它用的叉帽,这就一组标签,比如这个标签呢,我就叫做button。哎,然后呢,这是开始标签,然后这呢是一个叫结束的一个标签。啊叫一个button好,那么在这个呃,安卓的这个界面上来看呢,你这就是个按钮,就是对应的是一组标签,那如果说这个标签我们用,呃,咱们这个按钮呢,用Java代码去写的嘛,我一点这个按钮触发一个行为。那就相当于对应一个方法的调用了,咱们要用Java代码去写,这呢,是不是也得是一个对象啊。也就是说呢,叉二这个语言当中的一个标签,或者叫一对标签,它呢在我们Java当中啊。也是一个对象。它也是个对象,然后你一点这个按钮,希望他有某一个行为,比如做提交行为,那就相当于呢,我们给这个对象呢,是不是设置一个方法就可以了。
34:07
你1.0按钮,我们触发相应的一个事件,就要点击事件,然后设置这个监听器,然后里边呢,提供一个方法,1.0按钮,我们就让他调你某个方法就行了。诶就这样的逻辑哈,所以呢,诶这儿通过这样一个角度呢,大家再去体会一下什么叫万事万物皆对象啊。在我们Java当中都得是以对象的方式去呈现,哎,各种各样的东西啊,好,这里边儿呢,就是一个本地的文件或目录,用它的对象来呈现。好,这个呢,就是我们说它的一个点啦,然后下边的话呢,我们提到的一个file的一个实例化是吧,这个最起码你得会啊,就你有一个对象你得会,还有呢,我们说叫哎常用的这个方法,整个这块呢,大家做一个熟悉啊。行,然后呢,我们通过呢,讲这些方法说的其实挺多的,我们发现呢,这个file类中是吧。它呢,只有比如说呢,叫新建呀,删除啊,诶获取这个,嗯。
35:03
叫什么路径啊等方法是吧,不包含。呃,读写文件内容的方法。啊,那么我们说呢,此时需要呢,就使用。L是吧。OK啊,这呢,我们就相当于引出这个L流了。啊,这个呢,大家注意一下这个场景啊,行,主要的话呢,大家就是把这个到对象调方法,把这个事儿呢,我们熟悉熟悉啊。好,下边的话呢,我们就提到了,说要想呢,针对这个文件中的这个内容啊进行读写,我们就得用流,呃,下边关于这个流的一个概述,那这块呢,首先我们知道叫IO流的一个分类哈。哎,这个分类的话呢,我们有几个不同的角度,这个熟悉一下,比如说从这个流向的这个角度是吧。输了。输出流从那个处理的数据单位的不同。对,分成了叫节点,诶自节流。啊和字符流。
36:00
同那个留的角色的不同。哎,节电流和处理流。OK啊,这个呢,就是我们从不同的角度去分,这个呢,大家要去理解,因为我们这章讲的流还挺多的啊,所以这块你得也知道呢,从不同角度去分,它是一个什么样的流,然后呢,接着的话呢,我们提到这个流的一个,呃,鸡肋是吧。啊,有四个这个鸡肋。哎,分别对应呢,叫input stream output stream。对,Reader。哎,还有那个叫writer啊。这呢是四个鸡肋,这四个鸡肋的话呢,还有特点就是抽象的是吧。所以我们称为它叫抽象积累。那我们具体呢,使用的这些流呢,都是他们啊,他们四个其中之一的这个子类哈,注意。那么具体的话呢,我们讲哪些词类呢?这不就是下边这些吗。好,首先呢,我们讲的这个叫文件流,呃,文件里面你对应的就是这四个流啊,我们得先清楚啊,就在我们上面这四个基础上呢,其实咱们就前面加个file是不是就可以了。
37:10
在这啊,加个fair。行,然后这块呢,咱们整个这一章啊,大家呢,就可以把这四个流呢做一个。啊,基础的一个流了,诶我们讲课的时候呢,是先讲到后边这两个,以他俩为例呢,咱们去处理这个T格式的文件,然后呢,后边呢,又用这两个呢,处理这种比如说图片啊,JPG的这种文件等等的。OK啊行,所以这块呢,我们就需要呢,大家去掌握的啊,就这张落地呢,这块呢,需要去掌握的就是诶读写数据的一个过程。那这个过程呢,咱们说归结成这样的几个步骤啊,步骤一,首先呢,我们去创建啊file类的对象。啊,这个呢,你有可能是一个文件的起点,也可能是个终点,起点呢就是你读入这叫起点,写出去那就算终点。
38:03
啊,创建file类的对象是吧。哎,作为。哎,我们读取或者是写出数据的一个端点。OK啊,好,步骤二。啊,这个我们是不是需要创建相关的流入的对象。哎,相关的,哎,流的这个对象啊,接下来就看你具体是怎么操作了,你去创建相关内容,不光是我们说的这四个流,还可以是下边这个流,OK。然后呢,创建力流的时候呢,我们需要呢,把这个file类的对象呢,作为参数传递过去啊。这是我们这个步骤二,然后步骤三呢,就是我们的读取或者叫诶写出数据的一个过程。这个呢是比较重要的。啊,这个相对应的话呢,我们要是个字符就是。差性数组字节get数组还可以呢,必要的时候一些字窗也可以啊。好,这呢是步骤四,然后步,哎步骤三,然后步骤四呢,诶关闭这个流资源。
39:02
整个呢,我们这一章呢,涉及到这个操作呢,都是这样的几个步骤。OK啊,区别呢,就是这个流不一样,哎,读写的时候呢,这个参数不太一样。好,真的就不多说了啊,哎,包括呢,我们提到了说这个,哎,读过来的时候呢,这个file类的对象是不是可以存在,可以不存在这个问题,主要呢,就读的时候一定得在写出去的时候呢,可以不在啊。好,下边这个呢,我们叫缓冲流啊,缓冲流的话呢,其实就是我们在刚才的这四个流的基础上呢。哎,你把这个fell呢,给它去掉,换成叫buffer。哎,这就可以了。一下。这样替换一下。它呢跟我们上面这几个流呢,就是一一对应的。哎,在现有的这个流的基础上,你再包一下就可以了,叫缓冲流,主要呢,大家就记住呢,它的一个作用是啥。做成啥了?诶能实现呢,叫更高效的读写操作是吧。哎,更高效的。
40:02
哎,读写数据的这个,哎操作啊行,那也就意味着如果我们说文件比较大了啊,建议呢,你使用这几个流呢,去替换你原有的这种文件流啊就可以了,行,具体的细节差不太多啊,就不用多说了,好下边这个转换流。转换流呢,包括我们下边说这个对象流,诶与其说重点呢,是在这个转换流和对象流,不如说呢,它的重点呢,还是在讲字节和字符,讲编码和解码是吧?诶这个呢,与其说呢讲对象流,不是说呢,我们的重点呢是在于对象的序列化机制。啊,所以这块呢,我们的呃,第一个层面啊,呃叫层次一呢,就是相当于是熟悉。哎,咱们这个,诶转换流的一个使用哈,哎,咱们也有相应的代码,大家熟悉熟悉啊,那这里边就涉及到这两个流是什么啊,其实呢,就是我们这里边儿的。咱们看这吧。把这个流。哎,拼接上我们的这个。Reader。哎,这呢,就是我们这个输入型的。啊,然后呢,对应的另外一个呢,就是我们这个输出型的。
41:01
哎,把它呢,CTRLC。哎,拼接上我们这个writer。哎,这就可以了,哎这呢,就我们说的这两个流啊,行,咱们呢也提到说它呢,就把一个输入型的字节流转化成输入型的字符流。输入型的字符流。转化为输出型的字节流。诶,脑海当中浮盖浮现了咱们讲课的时候呢,提到过的那样的一个图是吧。哎,讲到我们这个转换流的时候。哎,这不有这样一个图吗?哎,记住这个图的话呢,就错不了了。好,这个我们再回过来啊,行,这呢是我们说这个层次一,然后呢,重点的话呢,其实我们要说的是这个层次二哈。哎,大家呢,需要呢去这应该算是一个要掌握的点了,那以后呢,就不能在这块再出问题了啊哎,就是我们涉及到叫诶字符的一个叫编码和解码的过程,这是一个,然后呢就是常用的一些。哎,字符集的一些情况啊,哎,这个大家都得是清楚的,包括呢,呃,需要呢,会去解决相关的问题。
42:07
哎,什么问题呢?以后大家肯定会遇到的啊,那就是我们在读写这种字符的过程当中啊,出现了乱码啊。啊出现乱码,那出现乱码的话呢,你得去解决这个问题,那本质的原因是什么呢。对,本质问题的话,就是我们使用的叫。解码集是吧。鱼。编码器不一致。啊,这个呢,你注意呢,不是说他俩不一样了,不一样那肯定是不对,但是你得是解码,你得往人家这块靠是吧。哎,你看人家编码用的啥,你得用啥,哎,现在有它这个过程啊。那你这块呢,给大家整成一致的,那就没问题了。啊,这呢,实际上是我们说的更重要的这样的一个情况啊,好这就过了,然后对于我们这个对象流来讲啊,这个我们也存在,这个叫A层次意义是吧,层次一的话呢,就是我们。
43:04
这个我写的叫熟悉啊。熟悉啊,这个层次一呢也是,哎,我们要熟悉呢,叫诶对象流的一个使用。啊,那通过这个对象里面的话呢,我们不是也提到了,首先呢,有两个哈,Object input。Stream啊,这个它还有object output stream。哎,这里边儿呢,哪个是序列化要用的呀。是不是他呀。哎,对,序列化时。呃,需要呢,使用的这个API啊,然后上面呢,就是。反序列化时候啊。哎,要使用的这一片,所以呢得整清楚啊,那实际上我们要是用这两个流的时候呢,是不是得先用这个呀。是吧,你得先把它传输出去,或者你写到一个文件里边,然后呢,别人呢才能把它再还原回来。啊,所以呢得有先输出,然后才有这个输入,所以呢,就是先序列化后反序列化。
44:03
OK啊,这个代码呢,咱们也都写了,然后这个写完之后呢,我们其实诶层次二呢。哎,更重要的,我们其实通过这两个流的使用呢,我们需要了解就是对象的。序列化机制。诶这个呢,其实我们更重要一个点啊,因为呢,我们提到了什么情况呢,就是使用的场景是吧。哎,这个场景的话呢,我们涉及到叫不同的进程之间。通信。啊,还有呢,我们这个客户端。啊,或者我们叫浏览器端。哎,它呢,与我们的服务器端。哎,通信或者叫传输数据啊。啊,那么这时候呢,只要你涉及到这个通信,通信其实就传输数据的意思了,这个呢,传输数据了,这时候这个数据如果我们是一个对象的方式来呈现的,那么这个对象呢,就要求满足虚拟化机制。啊,那现在呢,我们也讲了一下哎,要想实现虚拟化机制,对于自定义类啊,具备什么样的特征啊。
45:03
啊,自定类要想实现序列化机制。啊,需要满足的这个。这个点是吧。啊啊,需要满足的这个要求吧,及咱们说的这个注意点,注意点呢,比如我们提到这个zero version ID,你必须得提供一个啊啊不提供不行,包括呢,我们提到这个trans,还有这个static声明的呢,就不会给你序列化了啊这就注意一点了,要求的话呢,就是实现这个接口提供一个C。呃,实现了zeroable的接口,然后呢,提供一个zero u ID。然后呢,你的属性呢,也得是可序列化的是吧,诶三个要求啊。好,这就过了啊。然后呢,关于其他流这块使用啊,这个大家做一个了解就行。哎,首先呢,我们其实还提了叫数据流嘛。是吧,前面我们就介绍了一下啊,这个呢,就是得塔。Input stream。哎,A塔,哎,Output STEM,然后呢,还是一个了解。
46:06
哎,这个呢,叫标准的,哎输入流。标准的。哎,除出流是吧,哎点in out。哎c.out哎,这就行了啊,哎,然后下边呢,还讲了一个叫打印流啊。OK啊,这个呢叫print stream。或者叫print writer。OK啊行,这个细节都不用多说了,哎,后边我们讲了个第三方的,诶阿帕奇旗下的相关的这种扎包,诶这个呢,其实大家了解就行,你要说呢,这块呢,重点是啥呢?就是大家呢,先熟悉一下,我们引入第三方这个炸包呢,还有一种方式是吧,除了我们讲的这个几这种方式之外,在这个位置咱们不是诶添加进了一个library嘛,还有一种方式呢,就我们现在讲的啊,你可以在当前的module下呢,去新建一个叫Li或者LIS的一个文件夹,然后给它粘过来,然后呢,ADD as library是吧。
47:02
哎,在你当前这个model下呢,也可以使用这里边儿的API。在这呢,也是一种方式,OK啊。好,这个咱们就过掉了。嗯,行,那这呢是我们这一章的一个基本的知识点,好,下面我们看这个企业的真题,第一个谈谈L流里面长的类字节流,字符流。啊,这个呢,咱们不是讲了好多的这个流嘛,这个你可以呢,把我们上面说的这些流呢,你都可以抛出来是吧?哎,所以这个我们就哎具体的就列了啊。好,下边说呢,Java中呢有几种类型的瘤,说JDK呢,为每种类型的瘤呢,提供了一些抽象类呢,一共继承,请说出它们分别是哪些类,哎,这不就我们上面四个抽象基类吗?啊,就提到这四个是吧。OK啊。嗯,行,然后这四个为代表的话呢,这也可以理解成呢,就是我们几种类型了,输入型的啊,输出型的啊,字节型的,字符型的啊,这不就算几种类型吗。OK啊行,下边说流呢,一般需不需要关闭呢。
48:00
哎,需要关闭是吧?哎关闭用什么方法呢。哎,Close这个方法,哎,处理流是怎么关闭的。也是叫close。啊,关闭的同时呢,它内部包的这些啊流内部流呢也会关闭是吧。哎,处理流在关闭过程中。啊,也会啊,关闭。哎,内部的这个。那就可以了啊好,下边这个out of the stream里边这个right呢,是什么意思?就是数据写出的意思是吧。啊,那么相应的话呢,这个呢,方法你得看具体的这个子类了啊,他怎么去写的这个方法,然后相应的这种,嗯,你比如说我们是一个处理流啊,处理流在写出的时候呢,它呢,比如说是个缓冲流了,它会有一个数据的缓冲,在内存的先提供一个这样的一个缓冲区,默认的是8KB。是吧,然后呢,一次性的再去写出。这样一个过程啊。好,这呢,就是我们说的这个right的一个意思。像这个都比较简单一些啊,问那B的属于哪种瘤?
49:05
啊,处理流这里看它什么角度了啊,哎,它呢也是一个输入流。也是一个字符流啊,也是一个处理流是吧,不同的角度来说的,主要用来做什么的,就是相当于缓冲流,主要来做什么。啊,用来读取数据的,尤其文件比较大的时候呢,用它是吧,行这个呢比较简单,就略了啊说什么是缓冲区,有什么作用。对,就是内部呢,提供了一个,哎,是不是一个数组结构啊。哎,然后呢,将我们读取或要。哎,写出的这个数据。啊,是不是先在此数组中缓存呢?嗯,然后呢,达到啊一定。哎,程度时。比如说呢,我们这个速度满了,哎,然后呢,我们这个集中性的。啊,这个写除是吧。
50:00
OK啊行,哎,那主要作用的话呢,就是能够减少。诶,对,减少与磁盘的交互。哎,进而。提升我们的读写效率。啊,比较清晰啊,下边转换流说字节流与支付流是什么,怎么转换。这个就不多说了啊,就处理的基本单位不一样,怎么转化呢,就用这个转化流就行了,哎,非要讲的话呢,不就是我们讲的这里边儿这个图嘛,是吧。那至于我们怎么转化的这样一个点啊。哎,行,就简单往这一放了啊。好,就是这里边儿呢,需要包一个是字节流。他在这里边也要包一个磁节流。这个呢是从这里从字节里边先读过来,然后转化成字符,这个呢包一个字节流,是因为你写出去的时候,最终呢要写到文件里边,是以字节的方式写出去的。啊,这个区别啊。好,什么是Java的序列化,如何实现,哎,这呢,你就把这个序列化机制呢给描述一下,哎,就是咱们讲的这个知识点里边。啊,在我们的这块啊,打开就是这一段话的话呢,大家最好能够用自己的语言呢给他说出来,这里边儿呢,其实就是一个序列化过程和一个反序列化过程啊。
51:10
前边这块呢,就是序列化过程。后边呢,就是反序列化的过程。啊,把内存中的Java对象转换成与平台无关的二进制流啊,一方面呢,你可以给它保存到文件里边,相当于呢持久化到磁盘上了,另外一方面呢,可以通过网络呢,给它传输出去。这个呢就是序列化反过来啊,读到这种二进制流,你可能是通过网络读过来的,也可能是从这个磁盘的文件里边读过来的,只要你获取到这种流了,我就再给你还原成内存中的对象,这不就反序列化吗?哎,说说就行啊说呢,哎,Java中有有些类呢,为什么需要呢,实现C来这个接口。哎,对,就是便于此类的这个对象是不是实现序列化呀。哎,序列化操作。哎,什么叫虚列化操作?这不又回到上面的问题了。OK啊行这呢,就咱们整个这一章的这个点啊,不是特别难,相关的一些流呢,大家稍微的熟悉熟悉,写一写就可以啊。
我来说两句