iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB
苹果提供的常用的数据压缩算法LZMA、ZLIB、LZ4等;
这三种算法也是苹果建议的,可跨平台使用;
定义如下:
1 2 3 4 5 6 7 8 9 | /* 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. 需要引用头文件
1 | #include "compression.h" |
2. 数据压缩示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | - ( 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. 数据解压缩示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | - ( 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,压缩效果还是很明显的;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具