精华内容
下载资源
问答
  • 基于哈夫曼编码对文件进行压缩和解压缩(详细讲解) 本文对应c++代码实现链接 一、背景 利用特定的算法来压缩数据的工具,压缩后生成的文件称为压缩包。如果想使用其中的数据,就得用压缩软件数据进行解压。利用...

    基于哈夫曼编码对文件进行压缩和解压缩(详细讲解)

    本文对应c++代码实现链接

    一、背景

    利用特定的算法来压缩数据的工具,压缩后生成的文件称为压缩包。如果想使用其中的数据,就得用压缩软件对数据进行解压。利用压缩软件对文件中重复的数据进行压缩,可以减小文件中的字节总数,常用的压缩软件有rar、zip等。

    二、编码介绍

    2.1 等长编码

    任何文件在计算中都是以字节为最小单位进行存储的,所以可以把任何文件看作是利用8位(一个字节)作为等长编码编码方式,编码而成的文件。往往这种编码方式并不是最优的编码方式。

    例如:对电文“ababababaaaccd”利用8位的ASCII码进行等长编码,其编码如下:

    原文字符等长编码
    a01100001
    b01100010
    c01100011
    d01100100

    则源文件存储的编码为(注:为便于察看,在每个字符编码之间添加了空格,实际编码时没有这个空格):

    01100001 01100010 01100001 01100010 01100001 01100010 01100001 01100010 01100001 01100001 01100001 01100011 01100011 01100100

    可以计算出上述纯文本文件的编码长度为14个字节112位(注:当文件的大小不足1K,操作系统也会给它分配1K的存储空间)

    2.2 哈夫曼编码

    同样地,如果对电文“ababababaaaccd”进行哈夫曼编码,则其编码方式如下:

    原文字符字符频度哈夫曼编码
    a70
    b410
    c2110
    d1111

    则源文件可以利用哈夫曼编码,编码为:0 10 0 10 0 10 0 10 0 0 0 110 110 111
    可以计算出上述编码长度为24位,共需要3个字节(注:计算机以字节为单位,所以当存储哈夫曼编码的时候,若编码长度不是8的倍数时,最后一个字节需要补充为一个字节)

    三、功能描述

    对文本文件、图像文件重新编码。统计文件中256种不同字节重复的次数,以每种字节重复的次数作为权值(weight),构造一棵最多具有256个叶子结点的二叉树,使得带权路径长度达到最小,即Huffman树。给Huffman树上的所有叶子节点编码,形成的编码就是哈夫曼编码,类似如下图所示。

    在这里插入图片描述

    使用Huffman编码对原文件中的字节重新编码。重复次数较多的字节,Huffman编码的长度较短。原文件中每个字节的编码长度都是8位,而重复次数较多的字节的Huffman编码,长度比8位短得多,因此可能实现压缩。为了能够还原,保存压缩文件时应添加相应的文件信息,以达到解压的功能。

    四、设计步骤

    本方法需要通过读取文件,生成一棵带权的二叉树。树在程序中可以用链式、顺序结构两种方式。由于这里构造的Huffman树的叶子节点数为256,因此空间固定,这里介绍用顺序结构表示二叉树。

    4.1 定义存储结构

    主要是结构的定义及函数的声明、实现。定义一个结构体HuffNode表示二叉树的结点,记录每个结点的字节值、权值、父节点、左孩子、右孩子及该节点的哈夫曼编码,可参考下面的结构。
    在这里插入图片描述
    定义哈夫曼树结构,它是一个HuffNode结构体数组,定义如:HuffNode HuffTree[512]

    数组存储这棵哈夫曼树的所有结点及逻辑关系,其中前256个元素存储Huffman树的叶子结点,其余存储的是非叶子结点。
    说明:

    • 一个字节可采用unsigned char表示,同时也可表示该字节位于数组的下标,如十六进制为0x00,转化成int即为0,故数组下标为0表示字节00的信息。
    • 由于叶子结点为256个,非叶子结点为255,所以编码长度不可能超过256。

    4.2 读写文件

    本程序将使用二进制字节流的方式来读、写bmp文件。通过读取文件,统计256种字节出现的次数。文件正常打开后,可以逐字节读取文件数据,统计文件中出现的总字节数,及256种字节出现的次数,将其保存哈夫曼树相应的叶子结点权值(出现的频率)。

    4.3 创建Huffman树

    4.3.1 初始化

    对树进行初始。由于Huffman树的结点不会超过512,可以采用顺序存储结构,初始数组HuffTree[512]中所有元素包括以下信息:

    • b(节点表示的字节):节点表示的字节值,初始可为’\0’。
    • count(权值):前面读文件时已统计,此处无需统计。
    • parent(父节点):此时哈夫曼树未建立,故设为-1。
    • lchild(左孩子):此时哈夫曼树未建立,故设为-1。
    • rchild(右孩子):此时哈夫曼树未建立,故设为-1。
    • bits数组(结点对应的哈夫曼编码):此时哈夫曼树并未建立,可不设置或bits[0]为’\0’。

    4.3.2 选择叶子节点

    图片中可能会出现256种字节,但可能某些字节并未出现,因此判断HuffTree数组前256个元素有权值的元素,让这些元素做为Huffman树的叶子结点,其它的颜色不参于树的生成,提高效率。

    可采用排序,将HuffTree数组前256个元素按权值从大到小排序,从而找到有权值的元素个数,记录叶子节点的个数,得到哈夫曼树的总结点数。

    4.3.3 生成Huffman树

    每次选HuffTree数组中权值最小的两个元素,其中最小值作为树的左孩子,次小值做为树的右孩子,并将该树的根结点作为Huffuman树的非叶子结点。为了保存它们之间的逻辑关系,需保存以下信息:

    • 设置左、右孩子的parent
    • 将根结点的权值设置为左、右孩子权值之和
    • 设置根结点的lchild、rchild

    具体原理可参考如下讲解:

    假设初始有4个节点{d,c,b,a},其权值分别为{1,2,4,7},初始时哈夫曼树存储结构:

    在这里插入图片描述
    在这里插入图片描述

    A 、 在parent值是-1的结点中选取count值最小的两个结点进行合并,可以规定最小的合并为左孩子,第二小值合并为右孩子,合并生成的根结点的count值为左右孩子权值之和。
    在这里插入图片描述
    在这里插入图片描述

    B、重复上述过程,直到所有结点合并成一棵树

    在这里插入图片描述

    在这里插入图片描述
    (备注:从存储哈夫曼树的结构体数组的最终结果中可以看出,parent=-1,表示该结点是整棵树的根结点,lch=-1和rch=-1则表示该结点是叶子结点。)

    4.4 Huffman编码

    创建好哈夫曼树需将所有叶子结点(共n个)进行哈夫曼编码,即按顺序生成0x00~0xff中的n个字节(n<=256)对应的Huffman编码。哈夫曼树从根到每个叶子都有一条路径,对路径上的各分支约定指向左子树分支编码为0,右子树分支编码为1,从根到每个叶子相应路径上的0和1组成的序列就是这个叶子节点的编码。

    实现思想:可从叶子结点出发去判断分支编码为0或为1,当到达根结点时编码结束。初始时字符数组bits只有一个结束符。

    举例:若文本文件存储信息:‘ABBCCCDDDD’, 原本文件每个字符存占一个字节,共10字节。 哈夫曼编码之后,若A的编码为 ‘100’ ,B 为 ‘101’ ,C为 ‘11’ ,D 为 ‘0’ ,则原文本信息哈夫曼编码为:10010110,11111110,000,若哈夫曼编码即为写入的二进制内容,此处只需要3个字节,达到压缩的效果。

    4.5 压缩文件

    4.5.1 压缩文件数据

    写入压缩文件的内容不仅只是原文件字节对应的哈夫曼编码,还需要写入其它辅助信息。压缩文件的内容可参考如下图所示。
    在这里插入图片描述

    4.5.2 编码原文件

    A、以二进制流方式只读打开原文件,逐字节读取文件中的数据,使用Huffman编码对原文件中的字节重新编码,获得压缩后的文件数据,保存在字符数组buf中。

    B、拆分
    buf数组保存字节对应的哈夫曼编码,因此重新编码后的数据可能是一个很长的字符串,因此统计buf当前的长度。分以下两种情况处理。

    • 如果大于等于8,则进行拆分。每长度为8的字符串转成一字节,写入压缩文件。
    • 如果小于8,若文件中还可以读取字节,则等待下一个字节的编码。否则,如果文件的最后一个字节已读取,buf的长度仍不足8,则补0凑满一字节,写入压缩文件。

    举例:A的编码为 ‘100’ ,B 为 ‘101’ ,C为 ‘11’ ,D 为 ‘0’ ,读取原文件的内容“ABBCCCDDDD”
    读取A,得到buf=”100”,不够8位,读取B,buf=”100101”,不够8位,继续读入B,buf=”100101101”,此时buf的长度超过8位,则需要将buf的前8个字符”10010110”转换成二进制10010110,将8位二进制写入文件。之后buf=”1”(即舍去已处理的8位),等待读取原文件的其他内容,同样处理。

    C、字符串转码
    将长度为8的字符串转成相应的8位的二进制。利用左移位<< 操作完成字符串转成相应的二进制。

    举例:用一个unsigned char类型的变量c表示一个8位二进制,初始为00000000,根据字符串的编码进行相应处理,若读入的编码是1,则将c左移一位并与1按位或,若读入的编码是0,则直接将c左移一位。
    举例:如字符串“1001001”转成二进制1001001(一字节)
    在这里插入图片描述

    D、写入压缩文件
    把长度为8的编码转成二进制(一个字节)写入压缩文件。

    E、补0
    当文件读完,buf中的内容不足一个字节,则需要补0,再对哈夫曼编码位操作,把最后一个字节写入压缩文件。

    4.5.3 写入剩余文件信息

    上一步已把原文件所有字节对应的Huffman编码写入压缩文件。接下来写入的文件信息包括压缩后文件的长度(字节数),叶子结点的数目,每个字节的值、对应的编码长度及相应的huffman编码。
    注意:每次写入都是字节的n倍,因此,huffman编码长度不为8的倍数时,则补足0。

    举例:比如某字节编码若为110,则补0变成11000000
       编码若为01010101 10,则补0变为01010101 10000000

    具体步骤如下:

    1. 设置好压缩文件指针,并写入文件长度,节点总数信息
    2. 写入huffman树中的n个叶子结点的信息,包括每个字符值、对应的哈夫曼编码位数及哈夫曼编码
    3. 计算压缩百分比

    4.6 解压文件

    经过前面的开发,.bmp的图片文件已经压缩成了.huf文件,之后设计解压文件步骤

    4.6.1 文件操作

    以二进制方式读取.huf文件,打开写入的解压缩文件。

    4.6.2 扫描文件信息生成Huffman树和Huffman编码表

    A、读取文件信息,并将文件指针定位好为下面构造树做准备。

    B、重构Huffman树及Huffman编码
    利用压缩文件中的n个叶子节点的信息重新构造树。在此过程中每次取出一个字节,需要将一个字节转化为8个“01”字符。可以使用itoa函数进行转换,但不足8位要进行补0。

    4.6.3 将Huffman编码转换成对应的字符完成解压

    A、根据编码长度将结点排序
    由于Huffman编码的长度不一,为了能保证最长的Huffman编码能正确转换,因此先求出最长的Huffman编码。当取出的字符个数大于等于最长的编码长度,保证可以转换。这里利用排序算法将前n个结点排序,编码短的在前面,最长的编码在HuffTree数组下标为n-1的位置。

    B、定位文件指针,读取压缩文件中原文件的对应的Huffman编码信息。
    每次读取一字节转成8个“01”字符后暂存在字符数组bx中,直到bx的长度大于等于huffman编码的最大长度,才将相应的编码转化成相应的字节值。
    需要注意的是:这里读取一字节利用itoa函数转换,如长度不足8位要在前面补足0(同上)。

    C、将Huffman编码转换成对应的字节。
    当暂存huffman编码的bx的长度大于等于huffman编码的最大长度则可以在已生成的Huffman树中解码,得到编码对应的原字符。直到所有的huffman编码都比较完,完成解压缩。

    五、结果展示

    左侧为源文件,中间是压缩之后的文件,右侧是完成解压之后的文件
    在这里插入图片描述

    展开全文
  • java使用ZipOutputStream对文件进行压缩

    千次阅读 2019-04-19 19:27:22
    java中常用ZipOutStream进行文件压缩,用ZipInputStream对文件进行解压,zip相对于其他的文件的io稍有一点点不同的就是:它的内部就是一个小型的文件系统。如果是一个文件夹所有文件都是文档二不是文件夹。那...

    java处理文件压缩的类

    java中常用ZipOutStream进行文件的压缩,用ZipInputStream对文件进行解压,zip相对于其他的文件的io稍有一点点不同的就是:它的内部就是一个小型的文件系统。如果是一个文件夹所有文件都是文档二不是文件夹。那还好办直接操作。如果涉及到文件夹和文档的不固定分布。那就需要仔细考虑下。这里用递归进行遍历。

    ZipOutStream压缩文件

    主要两个方法:

    1.putNextEntry(new ZipEntry(""))

    这里面重要的就是ZipEntry这个概念首先要懂。ZipEntry是zip下面的文件条目,你可以比作外面系统的File类似。后面的参数就是在zip目录下的相对位置。所以这里有一点比较重要的就是当你遍历文件夹的时候你的ZipEntry的参数的改变规律。写不好的话会使整个文件目录混乱(如果文件层级较低那就不碍事)。而putNextEntry(ZipEntry z)的意思就是我下面io操作(写入)都是在z这个文件条目下进行的。

    2.write()

    这个zipoutputstream流和其他的output流不一样的地方就是BufferedOutputStream不能嵌套它。也就是它不能套缓存流用。

    对于文件夹下包含文件夹需要特殊考虑。判断它是不是文件夹。文件夹的话要遍历他的子节点文件。用递归思想。已在代码中给出注释。还有文件要注意相对绝对路径。

    贴上我的模板代码:

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class test1 {
    
    	public static void main(String[] args) throws IOException {
    		String filepath="F:\\fileget\\二班";//目标文件夹
    		String zipname="F:\\fileget\\二班软工作业.zip";//目标输出路径
    		filetozip(filepath,zipname);
    	}
    	public static void filetozip(String filepath,String zipname) throws IOException {
    		File file=new File(filepath);
    		OutputStream outputStream=new FileOutputStream(zipname);
    		ZipOutputStream zipout=new ZipOutputStream(outputStream);	
    		//递归函数  三个参数分别代表 1:当前zipout流 2:当前文件/文件夹 3:在zip下的path
    		dozip(zipout,file,""); 
    		zipout.finish();
    		zipout.close();
    		outputStream.close();
    	}
    	 private static void dozip(ZipOutputStream zipout, File file, String addpath) throws IOException {
            if(file.isDirectory())
            {
                File f[]=file.listFiles();
                for(int i=0;i<f.length;i++)
                {
                    if(f[i].isDirectory()) {
                        dozip(zipout, f[i], addpath+f[i].getName()+"/");
                    }
                    else {
                        dozip(zipout, f[i], addpath+f[i].getName());
                    }
                }
            }
            else
            {
                InputStream input;
                BufferedInputStream buff;
                zipout.putNextEntry(new ZipEntry(addpath));
                input=new FileInputStream(file);
                buff=new BufferedInputStream(input);
                byte b[]=new byte[1024*5];
                int a=0;
                while((a=buff.read(b))!=-1)
                {
                    zipout.write(b);
                }
                buff.close();
                input.close();
                System.out.println(file.getName());
            }
    
        }
        
      }
    

    在这里插入图片描述
    在这里插入图片描述
    另外,解压的那个类后面有时间会补充下来。

    • 如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai
    展开全文
  •  1、压缩:指通过某些算法,将文件尺寸进行相应的缩小,然而同时又不损失文件的内容。 二、gzip命令(进行压缩与解压)  1、命令作用  可以解开compress、zip与gzip等软件所压缩文件。  2、选项参数  -c:...

    一、压缩概念

         1、压缩:指通过某些算法,将文件尺寸进行相应的缩小,然而同时又不损失文件的内容。

    二、gzip命令(进行压缩与解压)

         1、命令作用

                  可以解开compress、zip与gzip等软件所压缩的文件。

         2、选项参数

                  -c:(compress)将压缩的数据输出到标准输出(stdout)上

                  -d:(decompress)解压缩

                  -t :(test)可以用来检验一个压缩文件的一致性,看看文件有无错误

                  -v :(verbose)可以显示出原文件/压缩文件的压缩比等信息

                  -(1,2,...,9):压缩等级,1最快,但是压缩比最差;9最慢,但是压缩比最好,默认是6。

                  -l:(list)查看压缩文件的压缩比:gzip –l *.gz

          3、练习

                练习1 、 在/tmp目录里创建demo目录,将/root目录里的install.log拷贝到该目录,进入该目录,压缩,解压缩。

               

              压缩install.log文件

    [root@ied01 demo]# gzip -v install.log

              解压install.log.gz压缩包

    [root@ied01 demo]# gzip -d install.log.gz

               压缩之后,原文件删除,只有压缩文件;

               解压缩之后,压缩文件删除,生成原文件。

               注意:压缩比越大,压缩速度越慢,但压缩后的文件越小。

           练习2、利用不同的压缩等级来压缩文件install.log

              压缩等级    -数字(1到9)

    [root@ied01 demo]# gzip -v -1 install.log
    

               

           练习3 、压缩的install.log文件后要保留原文件

               先把练习2中压缩的install.log.gz文件解压

               然后用以下命令压缩

    [root@ied01 demo]# gzip -cv install.log > install.log.gz
    

               

    三、bzip2命令(进行压缩与解压)

    1、命令作用

           gzip是为了取代compress 并提供更好的压缩比,那么bzip2 则是为了取代gzip并提供更佳的压缩比而来的。

    2、选项参数

          -c :将压缩的过程产生的数据输出到标准输出(stdout)

          -d :解压缩

          -k :(keep)保留源文件,而不会删除原始的文件

          -z :压缩

          -v :可以显示出原文件/压缩文件案的压缩比等信息

          -(1,2,...,9):与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快

    3、练习

         练习1 、 删除demo里的所有文件,将/root目录里的install.log拷贝到demo里,采用bzip2命令来进行压缩,要求显示压缩比信息。然后再解压缩。 

    如果要保留原文件,需要加参数-k:

    说明:参数-1,……,-9对于bzip2命令的执行没有影响,都是一样的压缩比,比gzip对文件的压缩比高。

    注意:zcat只能查看gzip压缩格式的文件,不能查看bzip2压缩格式的文件。

    注意:两个压缩命令都不能压缩文件夹,压缩文件夹该用tar命令,先把文件夹打包,然后再用gzip或bzip2压缩,得到的压缩文件就是*.tar.gz或*.tar.bz2。

     

    展开全文
  • 上传文件到HDFS,对文件进行压缩

    千次阅读 2013-03-18 22:42:51
    hadoop计算需要在hdfs文件系统上进行文件上传到hdfs上通常有三种方法:a hadoop自带的dfs服务,put;b hadoop的API,Writer对象可以实现这一功能;c 调用OTL可执行程序,数据从数据库直接进入hadoop  hadoop...
     
    

    hadoop计算需要在hdfs文件系统上进行,文件上传到hdfs上通常有三种方法:a hadoop自带的dfs服务,put;b hadoop的API,Writer对象可以实现这一功能;c 调用OTL可执行程序,数据从数据库直接进入hadoop

      hadoop计算需要在hdfs文件系统上进行,因此每次计算之前必须把需要用到的文件(我们称为原始文件)都上传到hdfs上。文件上传到hdfs上通常有三种方法:

        a hadoop自带的dfs服务,put;

        b hadoop的API,Writer对象可以实现这一功能;

        c 调用OTL可执行程序,数据从数据库直接进入hadoop

      由于存在ETL层,因此第三种方案不予考虑

      将a、b方案进行对比,如下:

        1 空间:方案a在hdfs上占用空间同本地,因此假设只上传日志文件,则保存一个月日志文件将消耗掉约10T空间,如果加上这期间的各种维表、事实表,将占用大约25T空间

                      方案b经测试,压缩比大约为3~4:1,因此假设hdfs空间为100T,原来只能保存约4个月的数据,现在可以保存约1年

        2 上传时间:方案a的上传时间经测试,200G数据上传约1小时

                                方案b的上传时间,程序不做任何优化,大约是以上的4~6倍,但存在一定程度提升速度的余地

        3 运算时间:经过对200G数据,大约4亿条记录的测试,如果程序以IO操作为主,则压缩数据的计算可以提高大约50%的速度,但如果程序以内存操作为主,则只能提高5%~10%的速度

        4 其它:未压缩的数据还有一个好处是可以直接在hdfs上查看原始数据。压缩数据想看原始数据只能用程序把它导到本地,或者利用本地备份数据

        压缩格式:按照hadoop api的介绍,压缩格式分两种:BLOCK和RECORD,其中RECORD是只对value进行压缩,一般采用BLOCK进行压缩。

        对压缩文件进行计算,需要用SequenceFileInputFormat类来读入压缩文件,以下是计算程序的典型配置代码:

    JobConf conf = new JobConf(getConf(), log.class);
        conf.setJobName(”log”);
        conf.setOutputKeyClass(Text.class);//set the map output key type
        conf.setOutputValueClass(Text.class);//set the map output value type

        conf.setMapperClass(MapClass.class);
        //conf.setCombinerClass(Reduce.class);//set the combiner class ,if havenot, use Recuce class for default
        conf.setReducerClass(Reduce.class);
        conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress

        接下来的处理与非压缩格式的处理一样


    文章来自:http://www.cnblogs.com/tangtianfly/archive/2012/12/19/2825353.html

    展开全文
  • /**********************压缩压缩部分************************/ function gZip(strText, cb) { zlib.gzip(strText, function (err, bufData) { cb(err, bufData); }); } function unZip(buffer, cb) { zlib....
  • Qt使用QuaZip对文件进行压缩解压操作

    千次阅读 2016-12-29 09:34:16
    使用QuaZip对文件进行压缩解压操作  八月份快要过去了,突然想到我还没有写一篇日志呢,想一想这一个月我并没有做开发以外的事情,三十天来还是尝试并且解决了不少技术上的问题的。所以这次我打算将其中一些作为...
  • 利用java zip进行对文件压缩和解压

    万次阅读 多人点赞 2019-06-17 17:38:45
    利用java JDK自带 进行对文件压缩和解压 ZipEntry:表示 ZIP 文件条目。 构造方法: public ZipEntry(String name) 可以用文件的相对路径来构造ZipEntry对象 ZipOutputStream: ZIP 文件格式写入文件实现输出...
  • static void Main() { string path = @"D:\Practise\IO\Compress"; string deCompressPath = @"D:\Practise\IO\DeCompress"; DirectoryInfo dir = new DirectoryInfo
  • 系统在服务器上运行时,会产生大量的日志,每天产生的日志量达到几个G,甚至几十个G,这样磁盘空间很快就会满,系统也就挂掉了,所以需要日志文件进行压缩压缩之后的日志文件通常只有原文件十分之一,甚至更少。
  • 压缩后的文件 压缩源文件 如压缩apk文件,代码如下 echo apk文件不能直接下载,所以压缩apk成rar来下载 d: cd D:\Program Files\WinRAR (切换到WinRAR安装目录) winrar a -ep1 -o+ -inul -r -iback D:\CI\...
  • 哈夫曼实现文件压缩解压缩(c语言)

    万次阅读 多人点赞 2019-01-23 17:04:47
    写一个对文件进行压缩和解压缩的程序,功能如下: ① 可以纯英文文档实现压缩和解压; ② 较好的界面程序运行的说明。 介绍哈夫曼: 效率最高的判别树即为哈夫曼树 在计算机数据处理中,霍夫曼编码...
  • Linux上压缩文件的 5 种方法

    千次阅读 2020-07-03 14:05:53
    在 Linux 上有不少用于压缩文件的命令。最新最有效的一个方法是 xz,但是所有的方法都有节省磁盘空间和维护备份文件供以后使用的优点。在这篇文章中,我们将比较这些压缩命令并指出显著的不同。 tar  tar 命令不是...
  • Linux中文件压缩和解压缩

    万次阅读 多人点赞 2017-12-22 22:31:47
    而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。 命令:tar -zcvf 打包压缩后的文件名 要打包压缩文件 其中:z:调用gzip压缩命令进行压缩 c:打包文件 v:显示运行过程 f...
  • Java小程序之哈夫曼树与文件压缩和解压缩(二)文件解压篇 一、解压原理: 了解了压缩原理之后,要解压文件就是压缩文件的逆过程;拿昨天的例子来说,如果我们收到这样一串二进制1 1 01 1 1 01 00(昨天漏掉了...
  • 利用Python对文件进行压缩

    千次阅读 2017-03-16 15:32:55
    对文件进行压缩是我们日常工作中最平常不过的行为了,压缩过的文件不仅可以节省磁盘空间,而且在网络传输中也可以节省不少时间。Python为我们提供了zipfile模块,这使得我们可以十分方便地对文件进行压缩操作,...
  • 如果不存在变量替换问题,请...发布线上正式版本时需要js文件进行压缩,但项目中的js、html文件中有动态变量需要通过maven进行动态替换,核心配置如下 <!--指定变量替换文件所在位置--> <filters&...
  • Java小程序之哈夫曼树与文件压缩和解压缩(二)文件压缩篇 一、初识压缩与解压缩原理 压缩可以理解为:文件的加密过程 解压可以理解为:文件的解密过程 例如: 我 - a 是 - b 谁 - c 我是谁 - 》 abc 二...
  • tar压缩和解压文件或文件夹

    万次阅读 多人点赞 2018-08-21 16:08:06
    1. 使用tar压缩文件 tar -zcvf test.tar.gz ./test/ 该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz 如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令: tar -cvf test.tar ./...
  • 哈夫曼树以及文件压缩的实现

    万次阅读 多人点赞 2016-12-22 22:20:46
    从哈夫曼树到哈夫曼编码再到文件压缩,一步步讲解,一步步实现
  • huffman算法实现文件压缩与解压

    千次阅读 多人点赞 2016-11-05 11:04:28
    本文采用哈夫曼编码的方式进行文件压缩和解压缩,主要原理是通过huffman编码来表示字符,出现次数多的编码短,出现次数少的编码长,这样整体而言,所需的总的bit位是减少的。但是当大部分字符出现的频率都差不多时...
  • 文件压缩压缩

    千次阅读 2018-09-10 19:12:15
    背景:看到文件压缩gzip,bzip2。脑子一热,想到能不能再次压缩文件?没有百度到,想要的答案,自己费事来try try。 看不懂的知识:https://blog.csdn.net/xuchuangqi/article/details/52939705 gzip 对于要压缩...
  • HDFS文件压缩

    千次阅读 2020-01-04 18:06:11
    新搭建的集群,需要进行各种测试,于是让一个同事导入一些测试数据,大约1.4T左右。我进行了一个简单的hive测试 //故意增加shuffle SELECT DISTINCT(COUNT id) FROM test_table; 谁知道…就这么一个简单的SQL,半个...
  • Linux —— 文件备份与压缩

    千次阅读 2017-11-23 14:10:27
    gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令 减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。 二、gzip 命令的语法及选项 语法: ...
  • 使用 字蛛 ttf字体文件进行压缩

    千次阅读 2019-07-29 11:31:57
    但是下载下来的字体文件有近20MB,直接放到网页上需要加载很久,因为字体文件包含了几乎所有的中文字符,但是网页用不了那么多的字,所以下面使用 字蛛 工具tff文件进行压缩,实际就是提取你网页中用到的汉字,...
  • 【小项目】用Huffman树实现文件压缩并解压

    万次阅读 多人点赞 2016-11-09 20:55:23
    一、前言  如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果...二、Huffman树压缩文件 定义:Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。 建立:
  • Linux里面的压缩和解压类指令

    万次阅读 2019-01-15 21:11:33
    gzip/gunzip 指令 ( .gz 不能压缩目录) ...gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和ta...
  • Java多文件压缩下载解决方案

    万次阅读 2018-09-07 18:00:33
    Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下载的文件...
  • 实现js文件进行变量替换和文件压缩方式如下: 现在实现方式有两种:1.js文件进行压缩,再进行变量替换。 2.js文件进行变量替换,再进行压缩。 前文https://mp.csdn.net/postedit/103187480介绍了...
  • 完成文件压缩与解压缩花了近一个星期的时间,期间,花了很遇到不少问题,花了很长时间去调试,最后完成了文本文件的压缩。通过调用库中的优先级队列实现哈夫曼树,基于哈夫曼树最终实现文件压缩。 ## 实现哈夫曼树...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,111,803
精华内容 444,721
关键字:

怎么对文件进行压缩