写在前面

我们在打包的时候unity会自动的把我们在场景中用到的资源与一些特殊文件夹中的资源压缩,但是如果我们需要做热更或者还想减少包的大小,虽然AssetBundles是可以为我们压缩的,但是可以把ab包分的更加的细,方便管理。

用的啥

使用的SharpZipLib这个库,这个是官网。可以根据.net的版本来选在下载dll库,unity一般都是.net2.0。也是一个开源的项目,在GitHub上可以看到源码与一些例子代码。推荐可以下载下载看一看。这个库中不仅只有Zip这一种压缩方式还包括了很多其他的压缩方式。

怎么用

写了 一个简单的unity的demo,其实就是官方的例子抄了一遍,代码如下:

压缩

public static void TestZipFile (string[] fileNames, string outputFilePath, int compressLevel) {try {using (ZipOutputStream stream = new ZipOutputStream (File.Create (outputFilePath))) {stream.SetLevel (compressLevel); //设置压缩等级0-9byte[] buffer = new byte[4096];foreach (string file in fileNames) {var entry = new ZipEntry (Path.GetFileName (file));entry.DateTime = DateTime.Now;stream.PutNextEntry (entry);using (FileStream fs = File.OpenRead (file)) {int sourceBytes;do {sourceBytes = fs.Read (buffer, 0, buffer.Length);stream.Write (buffer, 0, sourceBytes);} while (sourceBytes > 0);}}stream.Finish ();stream.Close ();Debug.Log ("压缩完成!");}} catch (Exception ex) {Debug.Log ("异常为:" + ex);}}

解压

public static void TestUnZipFile (string zipPath, string outPath) {if (!File.Exists (zipPath)) {Debug.LogError ("没有此文件路径:" + zipPath);return;}using (ZipInputStream stream = new ZipInputStream (File.OpenRead (zipPath))) {ZipEntry theEntry;while ((theEntry = stream.GetNextEntry ()) != null) {// Debug.Log ("theEntry.Name:" + theEntry.Name);string fileName = Path.GetFileName (theEntry.Name);// Debug.Log ("fileName:" + fileName);string filePath = Path.Combine (outPath, theEntry.Name);// Debug.Log ("filePath:" + filePath);string directoryName = Path.GetDirectoryName (filePath);// Debug.Log ("directoryName:" + directoryName);// 创建压缩文件中文件的位置if (directoryName.Length > 0) {Directory.CreateDirectory (directoryName);}if (fileName != String.Empty) {using (FileStream streamWriter = File.Create (filePath)) {int size = 2048;byte[] data = new byte[2048];while (true) {size = stream.Read (data, 0, data.Length);if (size > 0) {streamWriter.Write (data, 0, size);} else {// Debug.Log (theEntry.Name+"解压完成!");break;}}}}}Debug.Log ("解压完成!");}
}

浅析原理

这几天看了一下源码,不知道是自己心不静还是真的有点难,虽然注释写的非常的详细,但是还是没有看明白其中的奥义。最终是使用的霍夫曼编码压缩算法来进行压缩的。具体的算法就不做介绍了,关于霍夫曼编码压缩算法的讲解。
不过不得不说这个源码的结构真心写的很不错,值得一读,都想再去读一次设计模式了。

作者:黒可乐
链接:https://www.jianshu.com/p/c262f4e81765
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【Unity】Zip压缩 解压 文件介绍相关推荐

  1. zip包怎么解压oracle,使用jar与zip压缩解压文件的区别

    使用jar命令压缩和解压文件不会继承原来的权限,切记! 而使用zip/unzip压缩解压文件则会保留文件原来的权限等信息,因此使用压缩解压的时候尽量使用专业的工具 下面是测试内容和结果: 1.首先确认 ...

  2. android zip解压出错,常见的压缩解压文件出错解决办法

    您是否遇到过精力了好久下回来的压缩吧,结果在解压过程中出现错误的情况呢?比如说此解压失败或压缩文件文件已经损坏?导致解压文件失败.如果遇到这种问题,那就试试常见的压缩解压文件出错解决办法吧.凡事求人不 ...

  3. 测试掌握的Linux解压,轻松掌握Linux压缩/解压文件的方法

    对于在Linux下解压大型的*.zip文件,相信大家一般都会通过使用winrar直接在smb中来进行解压的操作,虽然说最终可能能够解压但有时候会存在解压时间长或者网络原因出错等故障的情况出现.那么有没 ...

  4. java代码实现解压文件_Java压缩/解压文件的实现代码

    用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...

  5. 命令行下(bat)使用 Lhaplus 自动 压缩 解压文件 (含参数设定说明)

    命令行下(bat)使用 Lhaplus 自动 压缩 解压文件,参数设定 https://mp.csdn.net/console/editor/html/104400832 ■前言 准备测试数据,要压缩 ...

  6. JAVA 7z Seven Zip 压缩和解压文件

    JAVA 7z Seven Zip 压缩和解压文件 7-Zip是基于GNU LGPL协议发布的软件,通过全新算法使压缩比率大幅提升 本文主要讲解通过JAVA方式把文件压缩成7z文件和对7z文件进行解压 ...

  7. android 解压加密zip,zip压缩解压加密器

    zip压缩解压加密器是一款非常好用的手机文件压缩解压应用软件,zip压缩解压加密器app为用户提供了各种文件压缩功能,可以批量操作,一键解压文件.感兴趣的朋友欢迎使用西西下载! 基本内容 zip压缩解 ...

  8. Java中zip压缩解压

    1. 解压问题 360压缩文件 使用jdk API 读取压缩文件后解压,报错 java.lang.IllegalArgumentException:MALFORMED 如果是好压压缩文件,使用jdk ...

  9. WinRAR压缩解压文件

    使用WinRAR压缩管理器压缩解压文件详细步骤如下: ■ 压缩文件 ① 鼠标右键需要压缩的文件,点击"添加到压缩文件",具体操作步骤如图所示: ② 压缩后的对应文件压缩包会显示在桌 ...

最新文章

  1. 仿iphone日历插件(beta)
  2. 把二叉搜索树转换为累加树
  3. Swift 位运算练习
  4. 公司6:JrVue重用布局
  5. axure如何导出原件_axure导出_axure怎么导出流程图
  6. 光脚丫学LINQ(044):数据库中的计算所得列
  7. keyshot卡住了还能保存吗_KeyShot常见问题汇总及解答(附图)!
  8. CNN更新换代!性能提升算力减半,还即插即用
  9. c++/ boost 库常见错误及解决方法总结
  10. 与我们息息相关的internet服务(2)---WWW服务
  11. 使用Screaming Frog SEO Spider 如何查找断开的链接
  12. 计算机思维ppt模板,制作PPT思维导图模板分享
  13. Android简介:安卓开发环境搭建步骤
  14. C语言多种格式输入乘法表,C语言:九九乘法表打印
  15. 大数据应用领域都有哪些(一)
  16. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  17. word中图片为嵌入式格式时显示不全_word中图片设置嵌入式后无法显示完整的解决方案(转)...
  18. linux中Swap分区是做什么的?
  19. 【JoJo的摄影笔记】胶卷的落日——柯达帝国兴衰录
  20. 【笔记】移动端自动化:adb调试工具+appium+UIAutomatorViewer

热门文章

  1. oracle 按某个字段分类汇总,Oracle语句分类汇总
  2. 两台计算机如何连接成网络错误,常见网络(连接)错误的解决方法
  3. 搜狗蜘蛛池之搜狗泛站群技巧详解
  4. 提取灵格斯里ld2格式词典的内容
  5. [Swift]LeetCode788. 旋转数字 | Rotated Digits
  6. Java中加载图片并显示
  7. python列表嵌套合并成一个列表
  8. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A. Visiting Peking University
  9. xls和 xlsx的区别 xlsx Excel文件怎么转换成 xls文件
  10. 浅析单向tvs管和双向tvs管的对比,谁能更胜一筹