00:00
行,那接下来的话呢,我们再讲一个流,这个呢叫转换流,转换流呢也属于我们说的处理流的一种,这相当于是咱们讲的第二个处理流叫做转换流,转换流转换流你得知道它转换什么,这呢提到了说转换流呢,它提供了字节流和字符流之间的一个转换啊,字节流和字符流之间的一个转换啊,这就有意思了啊,那什么意思呢?比如说咱们这块,我就以这个图为例吧。咱这呢有一个文件,这个文件呢是一个文本文件,文本文件就是里边呢有abcd,有这个中文等等,那现在的话呢,我们说呀,这个文件呢,正常咱们要操作它应该呢考虑使用这个叫字符流,但是现在呢,我们就是在它上面呢,作用了一个叫字节流,相当于还是以这种一个BA的一个BAT方式进来出来的啊来读读的,那么我们可以考虑呢,使用一个转换流,这个转换流的作用呢,就是能够把这个这个是输入这个层面的啊,咱们站位在这儿,输入这个层面的一个字节流,我们使用完这个流包装以后,就可以转换成是以差为基本单位的啊,进行了一个输入,相当于是从输入的字节流转换为了输出,呃,转换为了输入的字符流。
01:26
输入的字节流转换为输入的字符流,这样那对应的我们要是往外写,咱们现在呢,如果内存层面咱们操作呢,都是一个一个的差,相当于呢,就是一个一个的字符了,那么我们也可以使用另外一个流叫做output stream writer,把它呢,诶再转换成啊一个一个的bit。那一个一个BAT就底层010101这种方式,我们写入到具体的一个文件当中。相当于这个输出的这个转换流,可以把一个啊,把一个一个的char字符转换为一个一个的BAT啊,存到我们这个底层,这就涉及到这个转换的过程啊,这是一个输入的转换流,这是一个输出的转换流。
02:14
好,这呢我们先描述一下啊,在咱们这儿新建一个class转换流,这呢咱们这个我就以这个input stream,那这是一个输入的啊,Reader,这是其中的一个转换流,如果要写俩的话呢,就太长了,那我就以它为例吧,一个测试,这呢是咱们叫处理流值二啊叫转换流它的一个使用,诶首先第一个点这里提到了一个转换流是哪两个。啊叫in put stream reader output,嗯,Stream writer,行,那你先看一下这两个流,这两个流的话呢,你觉得这个流虽然叫转换流了啊,这个流你说我们要往这个流的体系里边去放的话啊。
03:10
这不就这四个基本的这个抽象类吗?那么刚才的这两个流应该归到哪个下边,比如说这个往往哪归。是字节流还是肯定是个输入的了啊,是字节流还是字符流呢,就说这个不好看了,说你这个要说有差的话呢,叫自己流,说有他呢叫自物流,俩都有,这也是。咱们说看谁呀,看后边啊,看后边咱们的这些流不都是看后缀吗。咱们讲到的时候。图呢这呢看后缀啊看后缀咱们现在讲的转换流,这不就这俩吗?它是在我们这个哎字符的这个体系下的啊讲它的意义是什么呢?就是回头我们这块呢,读写的时候呢,呃,操作的是不是也应该是差型数组。
04:11
对吧?哎在这下面不都是差异数组吗?你要在这呢才是自节数组啊,哎,这要注意这个问题,哎这呢是这样的两个流,哎明确一下,这两个流它呢是属于字符流啊,那属于字符流也叫处理流,这是咱们提到流的不同的处理的,呃,不同的分类方式,别晕了。那么这个input stream reader output stream writer,哎,它呢是两个处理轴,咱们处理的作用刚才也提到了,哎,就是提供这个字节流啊,与字符流之间的转换,如果大家有这样的需求,你就使用我们的转换流就行了,那么具体来讲,这个input stream reader,它可以将一个叫输入。
05:01
啊,这叫什么字节的输入流转换为叫字符的输入流。得得能够听进去,别别这个,呃,听一下这个面上就完了,然后脑子呢,不过。啊,反过来,不过脑子是吧,这不行哈,啊,你得能够听进去加一个字节的输入流,你就脑子里就想这个图就行。前这个图啊,将一个字节的输入流转转换为字符的一个输入流,好它呢是将一个字符的输出流转换为对叫字节的输出流,哎,到底是谁转谁的,别整混了,那这是这个问题啊,那其实这里边儿你看就涉及到字节,咱们知道一个一个的字节没有意义,那字符呢,是我们能看得懂的。啊,这好多字,字符呢,我们也可以称作叫字符串了,这就提到我们之前讲过的一个问题啊,这呢是叫字节,字节呢转换成字符串,当初咱们讲过,通常我们把这个过程称作叫编码还是解码啊。
06:14
从这个叫字节或者呢叫字节数组吧,转换为我们的叫字符数组或者呢叫字符串编码是解码,对解码嘛,这个事儿呢,别说破是吧啊,咱们说破的话呢,就是从看不懂的到看得懂的是吧?啊,这不就是解码吗?啊,那对应的另外一个的过程叫编码。就是它的一个逆过程啊,哎,能看得懂的,那我现在呢,想给它转换成咱们看不懂的,哎,就是这个。这不就这个事吗?这个事你想想现在我们的解码,咱们需要用这里边儿的哪个流。
07:04
字节到字符是不是它呀,Input用reader呗,哎,这不就从字节到字符了吗?那么下一个编码从字符到字节是不是第二个,哎,这是关于编码解码,咱们从这个流的角度啊,哎,我们需要用到的就是对应的这两个流,哎对应这两个流,那既然提到编码解码了,那对应的我们这呢,你操作的是这种这个文本数据了啊字符了,那到底哪一个这个字节啊,比如说我们底层呢,咱们划成十进制啊,就是97了,97到底是谁呀?发现它是小A,那你这个呢,怎么过来的,是不是就涉及到这个编码级了,或者叫字符集。啊,这有下一个问题,我们要提到一个字符集的问题。哎,次数集的一个问题啊行,那这块呢,我们就展开来分别说明一下啊来次数集咱们在下边写代码的时候呢,具体呢来看这个问题,那首先咱们这块呢,做一个什么事呢?哎,不妨我们看这有一个文件,这个文件我们呢先拿一个,呃字节流我呢去读它。
08:19
而且现在呢,我想把它读到控制台上。咱们是想把输入到控制台上啊,咱们说过像这个文件你要输入到控制台的话呢,尽量不让用字节流了,就可能会乱码了,但我现在就拿字节去操作它,那怎么着呢,我拿一个转换流给它转成字符的,哎,然后呢,再输入到控制台,这样是OK的啊,就这块呢,相对我们前面讲的几个流,这块呢,算是有点难度啊,来写一下。行,首先我们这有个文件,我们呢拿一个次激流这个我就把这个过程呢先写一起了啊file input stream FS等于new一个啊file input stream这呢我就不去这个file了啊,直接呢我们把这个文件CTRLC放到这。
09:10
哎,这是它,那我们现在是想给它读到这个控制台,我就不写这个输出操作了,那在接下来我们呢,去造一个叫input stream reader,这个SR等于new一个,哎,Input stream reader这样啊,然后ctrl out斜杠一下,好,这时候我们看一下这个构造器的参数,首先呢,都需要我们传入一个input stream,这呢是一个什么流。字节的输入流吧,输入没问题啊,我们这是个输入,你肯定也要一个输入了,关键呢说的它是一个字节的,就相当于我们这呢操作的是个字节流,但是呢,Input STEM reader呢,它本身又是继承于reader的啊,所以它又变成个字符流了,那这是参数一参数二,参数二的话呢,我们主要关注的就是像这两个啊,它俩呢,就类型不一样,描述的事儿是一样的。
10:13
涉及到是不是这个字符集的问题啊,啊字符集的问题就是你底层呢都是字节,我现在想把这个字节转换成字符,那到底是我怎么转呀,你得告诉我这个三角编码,呃,这个叫解码是吧,解码集。或者泛泛的说,我们就是一个字符集啊,那不妨咱们就用那个string。String啊,那首先把f is呢写进去,下边一个我们需要写一个字符集,或者大家也看到说我不写好像也不报错啊,是不是也有个这样的构造器,对这呢,咱们就相当于是使用系统默认的这个字符集了,那系统默认的这这这算是啥呀。那就看我们这个idea idea咱们当中设置的时候呢,是不是就设置成UTF杠八的了,那咱们在这个发coding,这不都是啊没问题啊,那你要是显示的写出来的话呢,哎,你就这块呢,来个逗号逗号哎写个utf杠杠,这呢我们就是相当于是拿它读了,上面是这个默认的,下面呢是我们显示的写了,那这块呢,你写它到或者说呢,你写别的这个应该写谁取决于什么。
11:29
这个我们要说明一下,参数二指明了叫字符集啊,那么这个字符集相当于是我们,呃,把这个字节转换成字符的一种对应方式,是按照这种方式来的,那你这块你你你是从哪块依据着说我们要写它呀。也就是说呢,不是说多让血糖嘛。是谁让你都让写他,那万一呢,你别人要写的不是他,你要想对的话,你也不能都写它呀,是吧,这个根据谁决定啊,根据这个文件当初存的时候决定的。
12:11
能理解吧,哎,这个文件当中存的时候啊,这个文件呢,我是从咱们这个,诶这不是从咱们这个课件里边这个位置拿的嘛,诶这个文件呢,我用这个notepad看一下啊,看着可能更好一些,因为它看在这块格式这块,你看我一点开是不是明确能看到它是U效杠八,诶后边这个大家先不用关注啊,这是开头的一个啊boom格式啊,有没有这样个标识啊,这个不用管了啊UTF杠八的就是这个文件呢,当时我保存的时候呢,就按照UTF杠八存的。哎,那么我们现在呢,要给它读,所以呢,我们才得用u ti杠八去读啊,哎,是这样一个原因啊,参数二呢,指明了这个字符集啊,这个具体使用哪个,哎,字符集啊,取决于这个文件啊,我们这个叫DBCp.t ST,它呢保存时呃使用的这个字符集啊,那是这个原因,好,那这块呢,我们把它呢,这不就写好了,写好以后下面呢,咱们需要去把它读到内存里边了啊这呢我们就用一个查询数组。
13:22
那这呢,我写个1024了啊啊,或者你写短点也行,有同学说说这个太长了,是不是一次性的读完了,哎,说这个没有出现乱码,那我给你短一点,然后呢,我们in一个L音啊,Y循环啊,is2.read,你看好那个方法呢,你也能看出来这个input stream reader,它是一个字符流操作的,都是叉型数组啊。行,然后不等于负一这样,那里边呢,我们,哎,呃,这个咱们是想给它输入到控制台的啊,那string at t2等于new一个string。
14:00
还零还音这样呗,这呢我们就s out一下,换行就不要了啊,HT2行这呢就输入到控制台了,输入完以后,我们这呢把这个流呢关闭一下,哎,还是只需要关最外层的这个就可以了。啊,这个还得用try catch finally啊,这个我就呃。简单点处理吧,哎,咱们呢,就直接我给大家这个throw了啊,哎这个大家应该知道,我们要操作呢,还得是用这个诶TRY开始翻也是最合适的,但这块我就简单处理了啊这呢我说明一下,嗯,此时哎这个处理异常的话啊,哎仍然。哎,应该啊使用哎,TRY哎,Catch,哎,Finally,哎,为什么我这写成throw呢,就是偷懒了啊,就省事了是吧,这个大家呢,这样也能更清楚的看到核心呢,就是这样几行代码,好我们现在呢,跑一下啊好大家看这时候呢,咱们把这个字串,然后就读到内存里了,那这时候它没有任何乱码。
15:10
哎,就是因为呢,咱们这时候呢,使用这个转换流,哎,指明了当初你存的时候用这个,那我现在还用这个去读,哎这样啊,那现在咱们把这个呢注释掉,把上面这个打开,上面不是会默认的吗?诶默认的我们再跑一下。是不是也可以啊,那说明呢,这个默认呢,确实是UTF杠八,你说是不是所有的都对啊,你要这么想的话呢,那我们就可以演示一下,是不是还有个GBK啊。那你看我这时候写的是JBK,相当于呢,我们用JBK去把你底层这个字节呢,转化成字符,看这就是乱码,嗯,原因呢,就是因为咱们当初存这个文件的时候呢,用的UTF杠八,你再用JPK去读它,显然呢不对啊,那utf杠八这个呢,大家写成小写的大写的都可以,嗯,这个呢没有要求,行这呢是关于我们这样的一个,相当于是一个读入操作,这块呢做的事其实是一个解码的操作啊。
16:11
啊是一个解码的操作,但是我写一下它,诶,它的一个使用啊,实践这个字节的输入流到字符的输入流的一个来转换啊。行,这个呢,我们就完了。
我来说两句