CocoaZ 是一个基于 Objective-C 的压缩库。它提供了一个易于使用且灵活的用户界面,该界面建立在古老的 zlib 之上。它非常适合基于文件和流的压缩/解压缩。
通过在您的 Podfile
中添加以下条目使用 Cocoa Pods 安装库。
pod 'CocoaZ', '~> 1.2'
或者,将 CocoaZ/
子目录中的所有源文件导入您的项目。如果您这样做,不要忘记使用 libz
(连接器标志:-lz
)连接您的二进制文件。
要开始压缩,创建一个 TDTZCompressor
实例。
// level must be between 0 and 9
// 0 = no compression, 1 = fastest compression, 9 = best compression
TDTZCompressor *compressor = [[TDTZCompressor alloc] initWithCompressionFormat:TDTCompressionFormatGzip level:6];
开始发送 NSData
进行压缩,使用 -compressData:
。压缩数据将被返回,但所有输入数据可能不会立即被压缩。《code>-compressData: 可以根据需要调用任意次数。
// Get input data from the source, say a file or a stream
// Send output data to the destination
NSData *output = [compressor compressData:input];
要强制压缩至今为止发送的所有内容,调用 -flushData:
。要输入 -flushData:
可以是一个 NSData
(它将包含在返回的压缩数据中),或者 nil
。
NSData *output = [compressor flushData:input];
一旦所有用于压缩的输入数据都已被发送,调用 -finishData:
。此方法也会刷新任何剩余的输入。与 -flushData:
类似,输入可以是 NSData
或 nil
。
NSData *lastOutput = [compressor finishData:input];
在调用 -finishData:
返回后,压缩完成。不应该再调用任何压缩方法。
解压缩的工作原理与压缩类似。首先,您创建一个 TDTZDecompressor
实例。
TDTZDecompressor *decompressor = [[TDTZDecompressor alloc] initWithCompressionFormat:TDTCompressionFormatGzip];
使用 -decompressData:
解压缩输入数据。
NSData *output = [decompressor decompressData:input];
使用 -flushData:
刷新已解压缩的数据。
NSData *output = [decompressor flushData:input];
一旦所有用于解压缩的输入数据都已发送,调用 -finishData:
。
NSData *lastOutput = [decompressor finishData:input];
-compressFile:error:
允许您轻松地将文件压缩到内存中。如果您打算使用此方法,请注意,它只能使用一次,并且不应与对其他压缩方法的调用混合使用。
TDTZCompressor *compressor = [[TDTZCompressor alloc] initWithCompressionFormat:TDTCompressionFormatGzip level:6];
NSError *error;
NSData *output = [compressor compressFile:@"/path/to/file" error:&error];
if (output == nil) {
NSLog(@"Error compressing file: %@", error);
}
同样,-decompressFile:error:
允许您将文件解压缩到内存中。
TDTZDecompressor *decompressor = [[TDTZDecompressor alloc] initWithCompressionFormat:TDTCompressionFormatGzip level:6];
NSError *error;
NSData *output = [decompressor decompressFile:@"/path/to/file" error:&error];
if (output == nil) {
NSLog(@"Error decompressing file: %@", error);
}
查看 TDTZCompressor.h 和 TDTZDecompressor.h 以获取关于 API 的更多详细信息。
zlib 及本库支持两种压缩/解压缩格式。即 zlib 和 gzip。 zlib 在 RFC 1950 中描述,它是 deflate 流(RFC 1951)的包装。 gzip (RFC 1952) 与 zlib 不同,但它也包装了 deflate 流。更多关于 deflate 和两种压缩格式的信息,请参阅 RFC。
要了解更多关于 zlib 库的信息,请查看其 手册。
若要报告任何与库相关的问题,请在 Github 上创建一个问题。
对于任何其他反馈或建议,请联系下列维护者。
请参阅 rake release:prepare
和 rake release:push
。