Iphone 上使用libz库解压zip,gzip文件
来源:互联网 发布:网络广西乞丐唱歌视频 编辑:程序博客网 时间:2024/05/19 11:51
转自:http://blog.csdn.net/sjzsp/article/details/6315114
服务器上返回的数据是个压缩包,这个文件折腾了我1天多的时间,今天看到这个帖子才算折腾完毕。xml数据终于解压成功。
最近做的一个东西中,需要从网络获取xml文件,但是该文件用了gzip压缩的。搜索一 下有人说gzip压缩的用urlrequest可以自己解压,但是这必须从服务器返回的header中有accept-Encoding说明是gzip 的。也就是用这句就可以实现自解压:
[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
这个在我的项目中没有作用,因为服务器返回的header中没有Accept-Encoding的说明。这就需要手动解压了!解压需要导入libz.1.2.3.dylib库,导入#import "zlib.h"
下面是解压的代码:
-(NSData *)uncompressZippedData:(NSData *)compressedData
{
if ([compressedData length] == 0) return compressedData;
unsigned full_length = [compressedData length];
unsigned half_length = [compressedData length] / 2;
NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
BOOL done = NO;
int status;
z_stream strm;
strm.next_in = (Bytef *)[compressedData bytes];
strm.avail_in = [compressedData length];
strm.total_out = 0;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
if (inflateInit2(&strm, (15+32)) != Z_OK) return nil;
while (!done) {
// Make sure we have enough room and reset the lengths.
if (strm.total_out >= [decompressed length]) {
[decompressed increaseLengthBy: half_length];
}
strm.next_out = [decompressed mutableBytes] + strm.total_out;
strm.avail_out = [decompressed length] - strm.total_out;
// Inflate another chunk.
status = inflate (&strm, Z_SYNC_FLUSH);
if (status == Z_STREAM_END) {
done = YES;
} else if (status != Z_OK) {
break;
}
}
if (inflateEnd (&strm) != Z_OK) return nil;
// Set real length.
if (done) {
[decompressed setLength: strm.total_out];
return [NSData dataWithData: decompressed];
} else {
return nil;
}
}
- Iphone 上使用libz库解压zip,gzip文件
- Iphone 上使用libz库解压zip,gzip文件
- Iphone 上使用libz库解压zip,gzip文件
- Iphone 上使用libz库解压zip,gzip文件
- android gzip,zip解压
- 使用java解压GZip文件
- 使用zlib库解压*.zip文件
- Java实现文件压缩与解压[zip格式,gzip格式]
- Java实现文件压缩与解压[zip格式,gzip格式]
- Java实现文件压缩与解压[zip格式,gzip格式]
- java中zip与gzip实现文件压缩,解压
- Java实现文件压缩与解压[zip格式,gzip格式]
- 使用Objective-Zip解压Zip文件
- 使用Java解压ZIP文件
- 在服务器上的用ZIP压缩或用GZIP压缩的文件,在客户端解压来读
- 在iPhone上读写zip文件
- 在iPhone上读写zip文件
- 在iPhone上读写zip文件
- Java非阻塞算法简介
- ORA-3136(WARNING Inbound Connection Timed Out)分析
- 总结---与ORACLE数据库交互程序性能优化篇
- dblink ora-12170
- 面试题大数相加相减
- Iphone 上使用libz库解压zip,gzip文件
- 数据库事务隔离级别
- (ORA-3136) Fatal NI connect error 12170
- android 之数据存储(IO)
- 类与类之间的关系
- Android 使用httpclient对self-signed certificate网站进行SSL连线
- SQL CUBE、ROLLUP 、COMPUTE 使用详解
- android获取源代码、编译、命令
- js表单验证——邮件验证