zoukankan      html  css  js  c++  java
  • 项目笔记---压缩方式

    1. 压缩类型的选择

      依据压缩方式的不同,压缩分为有损压缩和无损压缩。其中MP3一类的文件在一定程度的有损压缩下,人的感知不是十分明显而且还是MP3文件的体积相对减小。无损压缩就是类似于ZipRar一类的压缩方式,通过字典保存重复值并以一定的坐标映射方式制定对应的值,例如 重复字符串占20位,而映射的字符串仅仅占2位,这样就达到了压缩的目的,压缩率就是要看重复值出现的概率。这仅仅是压缩的一种方式,还有许多专门针对特定文件的压缩算法。

    2. 7z压缩

    7-Zip 是一款 开源 软件。大多数源代码都基于 GNU LGPL 许可协议下发布。AES 代码基于 BSD 许可下发布。unRAR 代码基于两种许可:GNU LGPL 和 unRAR 限制许可。更多下许可信息请查看:7-Zip 许可

    您可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机,不对 7-Zip 进行捐赠或支付并不影响您的使用。

    让我们把 7-Zip 和常用的压缩软件进行比较。

    软件名称

    Mozilla Firefox

    Google Earth

    161 个文件
    15,684,168 字节

    115 个文件
    23,530,652 字节

    压缩后

    压缩比

    压缩后

    压缩比

    7-Zip 4.237z 格式)

    4621135

    100%

    6109183

    100%

    WinRAR 3.50

    5021556

    109%

    6824892

    112%

    CABARC 5.1

    5131393

    111%

    7434325

    122%

    WinZip 10.0 betamaximum-PPMd

    5277118

    114%

    8200708

    134%

    7-Zip 4.23zip 格式)

    6222627

    135%

    8909446

    146%

    WinZip 10.0 betamaximum-portable

    6448666

    140%

    9153898

    150%

    压缩比结果由被压缩的数据大小而定。通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩档案小 30-70%。并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%

    C# 实现方式可参考 http://www.cnblogs.com/rentiansheng/archive/2011/09/15/2177716.html

    其中是用的C#调用外部程序的方式,所以没有添加DLL,直接调用的Exe文件。

     

    3. Zip压缩

      Zip压缩被Windows系统原生支持,但其压缩率并不是很高,如果对压缩率比较敏感建议直接用7Zrar。本人在项目中直接采用Zip的方式,利用开源控件实现压缩功能。

      DoNetZip(http://dotnetzip.codeplex.com/) 相对比C#自带的Zip压缩类和其他开源方式好用些,这也是选择开源的原因。官网还有API文档基本很全面,但是略微有些过时,貌似是更新不及时,仅供大家参考。

     

    代码很简单:

     

            /// <summary>
            /// Compress
            /// </summary>
            /// <param name="files"></param>
            /// <param name="zipFullName"></param>
            public static void Compress(List<string> files, string zipFullName)
            {
                //if (!System.IO.Directory.Exists(folderPath))
                //{
                //    throw new Exception("The directory does not exist!
    ");
                //}
                //if (System.IO.File.Exists(folderPath + "\" + zipName))
                //{
                //    throw new Exception("That zipfile already exists!
    ");
                //}
           // 以上注释掉的部分为检测是否文件已存在,因为如下代码会覆盖保存。
    using (ZipFile zip = new ZipFile()) { zip.Comment = System.DateTime.Now.ToString("G"); zip.AlternateEncoding = System.Text.Encoding.UTF8; zip.AlternateEncodingUsage = ZipOption.Always; zip.AddFiles(files, ""); // Add to root path, if not ,it should replace by "Template". zip.Save(zipFullName); } } /// <summary> /// Decompress /// </summary> /// <param name="folderPath"></param> /// <param name="zipName"></param> public static void Decompress(string folderPath, string zipName) { using (ZipFile zip = new ZipFile(folderPath + "\" + zipName)) { zip.AlternateEncoding = System.Text.Encoding.UTF8; zip.AlternateEncodingUsage = ZipOption.Always; zip.ExtractAll(folderPath, ExtractExistingFileAction.OverwriteSilently); } }

    说明:

                    zip.AlternateEncoding = System.Text.Encoding.UTF8;  // 如果想启用编码方式,则两条语句必须都添加,就像必须先打开开关一样,然后再调节亮度。
                    zip.AlternateEncodingUsage = ZipOption.Always;

     

    Reference

    http://www.baike.com/wiki/%E5%8E%8B%E7%BC%A9

    http://sparanoid.com/lab/7z/

    http://www.cnblogs.com/rentiansheng/archive/2011/09/15/2177716.html

    http://dotnetzip.codeplex.com/

     

    任何疑问,欢迎回复。

  • 相关阅读:
    Help-Web应用-.Net-Razor界面-入门-添加模型:在 ASP.NET Core 中向 Razor Pages 应用添加模型
    Help-Web应用-.Net-Razor界面-入门-教程:开始使用ASP.NET Core中的Razor Pages
    Help-Web应用-.Net-Razor界面-概述-教程:使用 ASP.NET Core 创建 Razor 页面 Web 应用
    白菜:奶白菜
    白菜:油白菜
    shell中&&和||的使用方法
    ISCSI测试
    iscsi共享分区测试
    RHEL7-openldap安装配置三(客户端自动挂载配置)
    redis配置笔记
  • 原文地址:https://www.cnblogs.com/cuiyansong/p/3995486.html
Copyright © 2011-2022 走看看