00:00
同学们,我们来看一下这个文件的解压,也叫文件的恢复,那刚才我们已经看到了,我们得到的这这呢,你是没有办法用。现有的这些压缩工具啊,解压工具来进行解压,因为你的算法不一样,所以它也不识别,会弹出一个红色的这个警告,是不是,你看我这个气。打开解压,它会报告一个错误,错误的原因就是它不识别了,他已经不识别你这种这文件,那么我们自己来写还是来看这个要求将前面压缩的文件重新恢复成原来的文件,那他的这个思路其实也特别简单,就是读取压缩文件。读这个压缩文件,要读这个压缩文件的两个部分,一个是它的数据,也就是那个BAT数组。第二个是他的赫夫曼编码表。这两个要读出来,读出来过后呢,完成解压,因为解压我们是不是写了个低扣的。你调一下这个D扣的代码就完成了,是不是特别简单?来吧同学们,我们现在呢,来编写这一个解压的方法,写到这里。
01:07
那么编写一个方法完成对压缩。压缩。文件的解压。解压。好的,那我开始就写这个方法了,Public static。VO什么呢?我们就叫on zip。One。没问题吧,那你是不是也要给我传那个文件,一个是你的这个压缩文件,比如说叫做zip file,另外一个就是你要把它解压到哪个位置去,是不是我就写个d ST file,这个大家DDST吧,Dst file。我先对这一个方法的参数做一个简短的说明。好,这个就是你要准备减压的,准备解解压的文件。
02:04
这个是解压到哪里。将文件解压到。哪个位置或者哪个路径都没问题。好,那现在呢,我们想一想。大家还记不记得我们在去?我们再去压缩的时候,其实我们是以对象流的方式,写对象流的方式把这个字节,呃,字节数组和哈弗曼编码表保存起来的,那现在是不是你恢复就很简单,大家有没有发现,如果当时我们不以对象流的方式来操作,那你恢复其实挺简单挺难的,为什么呢?因为你不知道哪个是哪个了。是不是这样的道理啊,好,现在呢,我们就简单了来,同学们现在我们就是非常轻松的就能搞定它来,首先呢,我们创建。我们先定义好吧,先定义文件,文件的什么呀,输入流。
03:04
这个文件输入流,我们就先定一个叫input什么呀,Stream。我叫is吧,初始化为空。Input,呃,这个写错了吗?是input input。Input stream。不能解析。Input stream。好,可能是地方写错了啊,改一下就行了。那么除了这个,除了这个是不是我们还要去定义一个将来与这个输入流关联的对象流,是不是还要定义一个,注意听啊,定义一个对象。对象输入流。那对象枢纽我们以前是学过的,叫什么呀?应该写成object object input stream。
04:02
是这个东西吧,那我就选个叫做o IO is。等于初始化为一个空。这个又写完了,那么我们把这个输呃输入流,把这个压缩文件读进来过后,是不是我们还要写出去,写到这个目标文件,那这里面是不是还要定一个定义一个文件的输入输出流,定义文件的输出流。好,这个就写完,那现在呢,我们把这个写出来叫output。Output什么呀?呃,String简单,一个普通的就行,OS初始化为空。这三个先准备好,那现在呢,我们出一下。Try catch。因为你在这个操作的时候肯定会有异常抛出,首先先把这个TRY班里写好,待会呢我们要用。那现在我们第一步该干什么?同学们先去创建这个文件。
05:00
文件输入流输入流。OK,那怎么创建呢?非常简单,六一个fire。Input stream by input stream把文件的这个名字给他,那这次就是z file,看到没有,那么这个名字分配给谁呢?分配给。Is,那紧接着呢,我们。把这个对象流创建起来,因为我在读的时候啊,我不能用普通的方式去读,我读不到,所以说现在呢,我们创建一个,呃,创建。一个和什么呢?和这个is关联的。关联的。关联的什么呢?这个对象输入流对象。对象输。入流。好的,那就是ois等于什么呢?六一个什么呀,Object。
06:04
Object input stream,这个没问题吧,同学们把S放进去拿到了,现在我们有了这个东西,我们现在就可以干什么呢?读取。现在我们就可以读取这个bit数组。这个数组就是说的再直接一点就是这个数组。哪一个数组呢,就是你原先。压缩过后的这个哈曼的。这个字节数组,好,我们可以写到这。就这个速度,那我就开始读了ois点。什么呢?Read的一个是不是该read呀,咱们read的一个。Object。但这个读完了过后,我们要把它。放到一个字节字节数组里面去,是不是应该这样写了BY?轴等于它。但这个类型不肯定不匹配,因为你是object这边是个数组怎么办?是不是应该转一下就可以了,这个大家能能理解吧,转成BY数组很简单,你。
07:08
读完这个哈曼be过后,你是不是下边应该读取我们保存的这一个哈,呃,赫曼的编码表是不是读取。读取这个赫夫曼编码表是这样子吧,同学们,那你是不是应该继续按对象的方式来读取,因为你保存的时候,你在写入的时候是按对象流的方式来写的,现在读你按对象流的方式来读就完了。同样这个时候我们应该。得到赫曼表,它是长什么样子?还记得吗?他的赫曼表是不是一个map啊?他前面是be。第二一个呢,它的它的value是string,现在我们就把这个写出来,就叫扣子等于它。同样我也要进行一个类型的转换,这个大家应该很清楚的知道对不对。
08:01
这就搞定了。说的再直接一点,这个就是我们的哈曼的这个扣子。是这样子吧,好,有了哈夫曼的字节数组,有了我们这一个哈夫曼的编码表,你下一步该干什么,心里面很清楚了吧?现在就可以解码了。解码是我们写的D扣的这个方法,D扣的方法第一个参数就是我们的哈夫曼编码,第二个就是哈夫曼的自己数组。是不是,那拿到过后,同学们整个会不会返回一个BAT。各位同学,这个BAT就是我们。原始的这个BAT也就恢复过后的BABA数组了,这个数组你是不是下一步要把这个BA数组写入到这个目标文件中就完事了呀,是不是好,现在呢,将。将BYTS这个数组写入到。写入到哪里呢?目标文件。
09:01
目标文件,嗯,那你要写入进去,是不是你首先得创建一个文件的。输入流啊,Input这个。跟谁关联起来,是不是跟DSTL关联起来?而这个文件前面已经定义了is。啊2O我看看啊,文件输入输六呃输出这输出的OS。这样就没问题了,拿到了啊,诶这个是输出输入流,这个输出流了,应该是啊,这不好意思,咱们写错了,应该是输出流,对不起啊,Fire output。对,是输出六,别写错了。输出流,因为你要把这个文件保存到一个磁盘上,肯定是输出六嘛,不可能再是输入了,拿到这个东西,下一步该干什么,同学们写写,写出数据就行了。写出数据,写。数据。
10:01
写数据到哪里呢?到这个文件中。就可以了。文件,那你怎么写呢?非常简单,os.right。直接把这个BY写进去完事。这就是代码行为,然后我们这边呢,如果有错误信息,好我们把这个信息打出来,当然这边仍然要存在一系列的关闭文件的问题,好我们关闭流呢,是先把。这个对象流先关一下。哦,跟这个打开的顺序。呃,反方向操作啊,就先先关这个os.close然后再关闭我们的osi.close再关闭我们的is or close。是吧,跟他的这个方向线法就相关,O ois,那整个地方又可能会有一个TRYTRY的一个问题,好把它踹一下。Try catch包起来,把这一块可能抛出异常的代码呢扔在揣块里面去,如果有了异常,我们把信息给他打出来就可以了,Get message。
11:10
好,同学们,关于这一个解压文件我们就写完了,来,各位朋友我们测一把。我们吹吧。但压缩文件这块我就。嗯,先注销了好吧。嗯,现在我们测试解压。解压文件。解压文件代码非常的简单,代码非常简单,我就写了string。OK,那我们的。这个这文件,这文件应该是哪一个呢?显然是这个文件没有问题吧。是这个文件。好,那么现在我们要把它。呃,保存到哪里去呢?好,Fire等于比如说我写D盘,下面我们src2.bmp,也就是说我把这个文件恢复成原文件过后呢,把名字在后面加了个二。
12:02
这样以示区别,看看两个对大小是不是一样的。现在我们调用on zip file。把这两个文件放进去完事,然后呢,我们这为了好看,提示一句话叫解压成功。也要成功。好,同学们,现在老师来运行一下这个解压代码,也就是测试我们刚才写的这段代码到底是否能够正确的运行。来吧,我们运行一把。运行之。好,我们可以看到呢,非常的顺利啊,这次我们非常的顺利。加压直接成功,那现在要看这个文件到底有没有生成,我们可以看到这边的确有这样一个文件,哎,大家有没有看到,大小是一样的,你原先是598个KB,现在仍然是598KB,那么我们打开看看文件到底是否是可以看到的。打开它。OK,你看非常的好,而且没有任何损失是吧,你原先是个太阳打开对不对,还是一个太阳。
13:06
啊,原先也是一样的,这样子也是再打开看一下。就是有时候呢,他有可能你把它解压完了过后,嘿,你会发现打开过后,他说文件有有损失,好,你看这个就没问题,非常好。好,同学们,那关于我们这个最佳实践的文件解压这一部分呢,就给同学们讲到这里,大家体验一下啊,好,自己去想想是怎么一步一步做出来的,其实就是按这一步,这里面有一个特别重要的技巧,就是我在写,写入这个压缩文件的时候,我是以对象流的方式写的,我也是以对象流的方式读出来的,一个是写进去读,我也是按对象流的方式读的,发现没有这一点大家一定要注意。好,那关于这个解压文件呢,我们就给各位朋友介绍到这里。
我来说两句