[英]C - How can I gzip decompress chunks of a file into a memory buffer
我有一個C
函數,它將gzip
文件解壓縮為另一個文件:
bool gzip_uncompress(const std::string &compressed_file_path,std::string &uncompressed_file_path)
{
char outbuffer[1024*16];
gzFile infile = (gzFile)gzopen(compressed_file_path.c_str(), "rb");
FILE *outfile = fopen(uncompressed_file_path.c_str(), "wb");
gzrewind(infile);
while(!gzeof(infile))
{
int len = gzread(infile, outbuffer, sizeof(outbuffer));
fwrite(outbuffer, 1, len, outfile);
}
fclose(outfile);
gzclose(infile);
return true;
}
這很好。
但是,我想將解壓縮的緩沖區塊寫入新的char[]
而不是輸出文件中。 但是我不知道如何確定完整解壓縮文件的長度,以便聲明一個char[?]
緩沖區來保存完整輸出。
是否可以修改上述功能以將文件解壓縮到內存中? 我假設我將其解壓縮為char[]
,但也許vector<char>
更好? 有關系嗎? 使用C
或C++
均可為我工作。
這在C ++中很簡單:
vector<char> gzip_uncompress(const std::string &compressed_file_path)
{
char outbuffer[1024*16];
gzFile infile = (gzFile)gzopen(compressed_file_path.c_str(), "rb");
vector<char> outfile;
gzrewind(infile);
while(!gzeof(infile))
{
int len = gzread(infile, outbuffer, sizeof(outbuffer));
outfile.insert(outfile.end(), outbuffer, outbuffer+len);
}
gzclose(infile);
return outfile;
}
您也可以完全省去outbuffer
,而是在每次讀取前直接調整向量的大小,並直接將其讀入通過調整大小添加的字節中,這樣可以避免復制。
C版本需要使用malloc
和realloc
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.