gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:06 26 4
gpt4 key购买 nike

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

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

#include "compression.h"

...

    - (NSData *) getDecompressedData:(NSData *) 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 压缩/解压方法和几个库,结果都是一样的。

我在这里做错了什么?

最佳答案

经过大量测试和研究,我发现我在我的服务器上使用的压缩库添加了一个压缩 header (第一个两个字节),每 RFC1950 .我跳过了这两个字节,compression_decode_buffer 工作得很好!

- (NSData *) getDecompressedData:(NSData *) 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com