苹果提供的常用的数据压缩算法LZMA、ZLIB、LZ4等;

这三种算法也是苹果建议的,可跨平台使用;

定义如下:

    /* Commonly-available encoders */
COMPRESSION_LZ4 = 0x100, // available starting OS X 10.11, iOS 9.0
COMPRESSION_ZLIB = 0x205, // available starting OS X 10.11, iOS 9.0
COMPRESSION_LZMA = 0x306, // available starting OS X 10.11, iOS 9.0 COMPRESSION_LZ4_RAW = 0x101, // available starting OS X 10.11, iOS 9.0 /* Apple-specific encoders */
COMPRESSION_LZFSE = 0x801, // available starting OS X 10.11, iOS 9.0

适用于有大文件数据上传下载,节省流量可以考虑使用;

使用说明:

1. 需要引用头文件

#include "compression.h"

2. 数据压缩示例:

- (void)testCompress{

    NSData *src = [NSData dataWithContentsOfFile:@"/Users/cocoajin/Desktop/src.txt"];

    NSLog(@"src: %ld",src.length);

    uint8_t *dstBuffer = (uint8_t *)malloc(src.length);
memset(dstBuffer, 0, src.length); size_t compressResultLength = compression_encode_buffer(dstBuffer, src.length, [src bytes], src.length, NULL, COMPRESSION_LZMA); if (compressResultLength > 0) {
NSData *newData = [NSData dataWithBytes:dstBuffer length:compressResultLength];
[newData writeToFile:@"/Users/cocoajin/Desktop/compress.data" atomically:YES];
NSLog(@"com: %ld",compressResultLength);
NSLog(@"com: %.2f",(src.length-compressResultLength)/(float)src.length); }else{
NSLog(@"compress error!");
} free(dstBuffer);
}

  

3. 数据解压缩示例:

- (void)testDeCompress{
NSData *src = [NSData dataWithContentsOfFile:@"/Users/cocoajin/Desktop/compress.data"]; NSLog(@"src: %ld",src.length);
uint8_t *dstBuffer = (uint8_t *)malloc(1024*1024*10);
memset(dstBuffer, 0, src.length); size_t decompressLen = compression_decode_buffer(dstBuffer,1024*1024*10,src.bytes,src.length,NULL,COMPRESSION_LZMA); if (decompressLen > 0) {
NSData *newData = [NSData dataWithBytes:dstBuffer length:decompressLen];
[newData writeToFile:@"/Users/cocoajin/Desktop/decompress.txt" atomically:YES];
NSLog(@"com: %ld",decompressLen); }else{
NSLog(@"decompressLen error!");
} free(dstBuffer);
}

4. 实际测对一个1.9M的txt小说文件压缩,压缩以后大小为0.8m,压缩效果还是很明显的;

  

iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB的更多相关文章

  1. 手把手教你ARC——iOS/Mac开发ARC入门和使用

    转载自:http://www.onevcat.com/2012/06/arc-hand-by-hand/ 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和 ...

  2. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  3. Mac iOS Mac Watch 应用和游戏编程开发工具推荐

    今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会 ...

  4. 谈谈 iOS 中图片的解压缩

    原文 对于大多数 iOS 应用来说,图片往往是最占用手机内存的资源之一,同时也是不可或缺的组成部分.将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程,其中就包括了对图 ...

  5. 【转】谈谈 iOS 中图片的解压缩

    转自:http://blog.leichunfeng.com/blog/2017/02/20/talking-about-the-decompression-of-the-image-in-ios/ ...

  6. 中文 iOS/Mac 开发博客列表

    中文 iOS/Mac 开发博客列表 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 一只魔法师的工坊 http://blog.ibireme.com ...

  7. 总结Objective-c常用算法

          今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...

  8. 中文 iOS/Mac 开发博客列表(转)

    转自https://github.com/tangqiaoboy/iOSBlogCN 中文 iOS/Mac 开发博客列表 本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息. 本博客列表 ...

  9. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

随机推荐

  1. 存储过程导入excel

    #region 导入订单        protected override string DoExcelData(System.Data.DataTable dt)        {         ...

  2. LoadRunner之IP欺骗

     一.启动IP欺骗,弹出提示窗口:      二.将本机改为静态IP: 1.查看当前的IP相关信息: 2.更改IP:  三.正式设置模拟IP号段: 1.重复步骤一,会弹出如下弹窗,选择第二项并下一步: ...

  3. 20165235 2018-3 《Java程序设计》第5周学习总结

    20165235 2018-3 <Java程序设计>第5周学习总结 教材学习内容总结 第六章 内部类与异常类 (一)内部类:1.java支持在一个类中定义另一个类,这个类叫内部类.2.内部 ...

  4. JetBrain(Pycharm,Clion...)的使用优化

    我们知道,在JetBrain系列软件中,另起一行继续编辑的快捷是Shift+Enter,这样即使指针没有到达当前行结尾,也可以另起一行,如图1中的情况:    >>>  Shift+ ...

  5. JavaScript 作用域的误区

    了解JavaScript的同学可能知道,JavaScript语言由于设计原因,导致语言本身存在很多先天性的不足,当然这并非设计者有意的,js语言最初是被设计来作为网页交互的脚本语言,依照现有的js语法 ...

  6. 机器学习实战笔记-k-近邻算法

    机器学习实战笔记-k-近邻算法 目录 1. k-近邻算法概述 2. 示例:使用k-近邻算法改进约会网站的配对效果 3. 示例:手写识别系统 4. 小结 本章介绍了<机器学习实战>这本书中的 ...

  7. Splay的初步学习

    具体是啥,qwq 有时间再补吧,贴一下代码: #include<iostream> #include<cstdio> #include<cstring> #incl ...

  8. 使用 DITA-OT 发布一份 CouchBase Server 手册

    最近需要学习 CouchBase Server.而 CouchBase Server 官方网站访问速度非常慢,所以尝试使用 DITA-OT 发布一份本地文档.(其实 CouchBase Server ...

  9. JS实现缓动动画效果

    原理如下: 假设要从数值A变化到数值B,如果是线性运动,则每次移动距离是一样:如果是缓动,每次移动距离不一样.那如何才能不一样呢?很简单,按比例移动就可以. 例如:每次移动剩余距离的一半. 对吧,超容 ...

  10. php数组和对象转换函数

    /**  * 数组 转 对象  *  * @param array $arr 数组  * @return object  */ function array_to_object($arr) {     ...