• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS(objective-c)compression_decode_buffer() 返回零

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:37:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在将我服务器上的一个非常大的 json 结果转换为压缩格式,我可以在我的 objective-c 应用程序上解压缩。我更喜欢使用 iOS 9 compression lib如果可能的话(libcompression.tbd),在 Apple's CompressionSample/BlockCompression.c sample code 中描述.

我将压缩的 NSData 结果传递给以下方法:

#include "compression.h"

...

    - (NSData *) getDecompressedDataNSData *) compressed {
        size_t dst_buffer_size = 20000000;   //20MB
        uint8_t *dst_buffer = malloc(dst_buffer_size);
        uint8_t *src_buffer = malloc(compressed.length);
        [compressed getBytes:src_buffer length:compressed.length];

        size_t decompressedSize = compression_decode_buffer(dst_buffer, dst_buffer_size, src_buffer, compressed.length, nil, COMPRESSION_ZLIB);
        NSData *decompressed = [[NSData alloc] initWithBytes:dst_buffer length:decompressedSize];
        return decompressed;
    }

compressed 参数的长度与我的服务器日志匹配,但 compression_decode_buffer 的结果始终为零,并且 dst_buffer 未修改。我没有收到任何错误,日志也没有相关信息。

我在服务器端尝试了 ZLIB 和 LZ4 压缩/解压方法和几个库,结果都一样。

我在这里做错了什么?



Best Answer-推荐答案


经过大量测试和研究,我发现我在服务器上使用的压缩库添加了一个压缩头(第一个两个字节),根据 RFC1950 .我跳过了这两个字节, compression_decode_buffer 就像一个冠军!

- (NSData *) getDecompressedDataNSData *) compressed {
    size_t dst_buffer_size = 20000000;   //20MB
    uint8_t *dst_buffer = malloc(dst_buffer_size);
    uint8_t *src_buffer = malloc(compressed.length);
    [compressed getBytes:src_buffer range:NSMakeRange(2, compressed.length - 2)];

    size_t decompressedSize = compression_decode_buffer(dst_buffer, dst_buffer_size, src_buffer, compressed.length - 2, nil, COMPRESSION_ZLIB);
    NSData *decompressed = [[NSData alloc] initWithBytes:dst_buffer length:decompressedSize];
    return decompressed;
}

关于iOS(objective-c)compression_decode_buffer() 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367884/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap