Iphone 上使用libz库解压zip,gzip文件
来源:互联网 发布:淘宝护肤品假货多吗 编辑:程序博客网 时间:2024/05/06 18:43
服务器上返回的数据是个压缩包,这个文件折腾了我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文件
- Ogiror 中 Hydrax 插件的使用
- Check string is palindrome or not
- 编译Ogre 3D 1.7与Hydrax 0.5.1
- linux 命令 dd
- Hydrax海洋插件
- Iphone 上使用libz库解压zip,gzip文件
- the to_char function
- 兼容IE,firefox浏览器回车事件
- 将excel用户界面嵌入到自己的windows form中
- Hyper-V虚拟机的两种外网连接方式
- myeclipse中直接复制的项目或项目改名后不能正常运行的解决方法
- 解决:hibernate查询过多时与数据库连接断开或无法再查询到数据问题。
- MFC多线程
- 根据当前时间取得星期一跟星期天的日期