ioszip怎么解压_unzip解压命令

ioszip怎么解压_unzip解压命令最近做的一个东西中,需要从网络获取xml文件,但是该文件用了gzip压缩的。搜索一下有人说gzip压缩的用urlrequest可以自己解压,但是这必须从服务器返回的header中有accept-Encoding说明是gzip的。也就是用这句就可以实现自解压:[urlRequestaddValue:@”gzip”forHTTPHeaderField:@”Accept-Encodi

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近做的一个东西中,需要从网络获取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;  

    }  

}

以上是一个网上很容易搜索到的解压方法,正确,但是有个问题,就是,原文章中提到了zip,导致容易认为也可以解压zip。但是 经过验证这个方法是无法解压zip格式的压缩文件的。  解压gzip文件还是相当好用的。 

标记一下,gzip和zip文件并不是一个扩展名那么简单,压缩算法上有很大差异。 只是很多压缩软件做了屏蔽,让人感觉不到他们的差别了。  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197205.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PCI与PCIe学习一——硬件篇[通俗易懂]

    PCI与PCIe学习一——硬件篇[通俗易懂]文章转载自:点击打开链接最近在学习驱动开发过程中涉及到PCI相关知识,在网上看了很多文章,良莠不齐,我总结一下比较好的文章分享给大家,那就从源头开始说起。PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primaryinterface)…

    2022年6月15日
    49
  • COM编程之三 QueryInterface

    COM编程之三 QueryInterface【1】IUnknown接口客户同组件交互都是通过接口完成的。在客户查询组件的其它接口时,也是通过接口完成的。而那个接口就是IUnknown。IUnknown接口的定义包含在Win32SDK中的U

    2022年7月4日
    23
  • RPC协议及常用框架

    RPC协议及常用框架https://www.jianshu.com/p/8ba4b7b834aaRPC协议RPC:远程过程调用,原则上来说系统间跨进程的调用都属于RPC范畴RMI/HTTP/dubbo/SpringCloud/thriftRPC框架如何实现分布式环境下的远程调用在一个典型的RPC的使用场景中,包含了服务发现,负载,容错,网络传输,序列化等组件,其中RPC协议指明了程序如何进行网络传输和序列化。RPC协议的组成RPC协议的组成1.地址:服务提供者地址2.端口:.

    2022年5月12日
    46
  • 三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?

    三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?最近阿里正式开源的BizCharts图表库基于React技术栈,各个图表项皆采用了组件的形式,贴近React的使用特点。同时BizCharts基于G2进行封装,Bizcharts也继承了G2相关特性。公司目前统一使用的是ECharts图表库,下文将对3种图表库进行分析比对。BizCharts文档地址:BizCharts一、安装通过npm/yarn引入npminstallbizc…

    2025年6月24日
    3
  • Android项目ViewPager+Fragment的基本使用[通俗易懂]

    Android项目ViewPager+Fragment的基本使用[通俗易懂]Android项目ViewPager+Fragment的简单使用

    2022年7月22日
    12
  • pycharm激活码2021最新破解方法

    pycharm激活码2021最新破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号