gpt4 book ai didi

c - libcurl 即时压缩下载的数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:19 24 4
gpt4 key购买 nike

Linux。我正在通过 libcurl 下载大量数据。数据具有低熵但体积巨大(数十 Gb)。目前我先下载文件,然后用zlib压缩。
但这需要更多的时间和空间。所以我正在尝试在 libcurl 写入回调中即时实现压缩。
主要问题是要下载的数据的确切大小未知。代码很脏,但它只是一个测试。而且这似乎不是一个可行的方法。也许其他方式更合适?

unsigned char *outZ=malloc(1500);//Maximum write chunk is 1448
...
size_t
curl_write_func(void *ptr, size_t size, size_t nmemb, void *stream)
{
size_t data=zip(ptr,size*nmemb,outZ,1500,Z_FINISH);
fwrite(outZ, 1, data, (FILE *) stream);
return (size*nmemb);
}

size_t
zip(void *source, size_t src_size, void *target,size_t tgt_size, int mode)
{
z_stream strm;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
deflateInit(&strm, Z_BEST_COMPRESSION);
strm.next_in = source;
strm.avail_in = src_size;
strm.next_out=target;
strm.avail_out=tgt_size;
deflate(&strm, mode);
deflateEnd(&strm);
return (tgt_size - strm.avail_out);
}

最佳答案

您能控制服务器端发生的事情吗?

如果是,在关闭 libcurl 端的内容解码的同时请求已经 GZIP 压缩的内容怎么样?以下是如何进行(来自最近关于邮件列表的讨论):request encoding without decoding .

否则库如libarchive - 提供流媒体功能,以流媒体方式提供(例如 la HTML streaming parser with libcurl )应该可以解决问题。

--

更新:这是使用 zlib 进行即时压缩的示例代码: https://github.com/deltheil/zurl .

关于c - libcurl 即时压缩下载的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632005/

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