iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB
苹果提供的常用的数据压缩算法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的更多相关文章
- 手把手教你ARC——iOS/Mac开发ARC入门和使用
转载自:http://www.onevcat.com/2012/06/arc-hand-by-hand/ 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和 ...
- iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)
手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...
- Mac iOS Mac Watch 应用和游戏编程开发工具推荐
今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会 ...
- 谈谈 iOS 中图片的解压缩
原文 对于大多数 iOS 应用来说,图片往往是最占用手机内存的资源之一,同时也是不可或缺的组成部分.将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程,其中就包括了对图 ...
- 【转】谈谈 iOS 中图片的解压缩
转自:http://blog.leichunfeng.com/blog/2017/02/20/talking-about-the-decompression-of-the-image-in-ios/ ...
- 中文 iOS/Mac 开发博客列表
中文 iOS/Mac 开发博客列表 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 一只魔法师的工坊 http://blog.ibireme.com ...
- 总结Objective-c常用算法
今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...
- 中文 iOS/Mac 开发博客列表(转)
转自https://github.com/tangqiaoboy/iOSBlogCN 中文 iOS/Mac 开发博客列表 本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息. 本博客列表 ...
- Atitit 编程语言常用算法attilax总结
Atitit 编程语言常用算法attilax总结 1. 编译算法分类and 数据操作算法.1 1.1. Tab driver stat 状态转换表格算法1 1.2. Nest case 词法分析 ...
随机推荐
- Trident的过滤操作
1.过滤操作 只是判断某个tuple是否保留 无需跨网络,无需跨分区 不会改变tuple的结构,只是改变tuple的数量 2.需求 过滤掉不是订单的tuple. 其中订单中包含“IBEIfeng.gi ...
- Dubbo入门---搭建一个最简单的Demo框架(转)
Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. ...
- html-定位
概述: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 在Idea中添加自定义补全代码设置(Main方法为例)
一.打开File->setting->Editor->Live Templates 二.注意右边有“+”.“-”号,点击+号选择第二个Template Group...,并输入新组名 ...
- ELM:ELM基于近红外光谱的汽油测试集辛烷值含量预测结果对比—Jason niu
%ELM:ELM基于近红外光谱的汽油测试集辛烷值含量预测结果对比—Jason niu load spectra_data.mat temp = randperm(size(NIR,1)); P_tra ...
- SVM:SVM之Classification根据已有大量数据集案例,输入已有病例的特征向量实现乳腺癌诊断高准确率预测—Jason niu
load BreastTissue_data.mat n = randperm(size(matrix,1)); train_matrix = matrix(n(1:80),:); train_lab ...
- 在VS2017(VC15)上配置opencv4.0.1环境
在VS2017(VC15)上配置opencv4.0.1环境 转 https://blog.csdn.net/GoldenBullet/article/details/86016921 作为萌新最初 ...
- poj 1386 Play on Words门上的单词【欧拉回路&&并查集】
题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...
- CentOS 7 安装MongoDB详细步骤
创建/etc/yum.repos.d/mongodb-org-4.0.repo文件,编辑内容如下: [mongodb-org-4.0] name=MongoDB Repository baseurl= ...
- servlet模板的修改
找到myeclipse的安装目录: 找到此目录下的这个jar包 右键以压缩包的方式打开然后找到templates文件夹并打开它: 在打开的templates文件夹找到并以高级记事本打开Servlet. ...