簡體   English   中英

C-如何gzip將文件的大塊解壓縮到內存緩沖區中

[英]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>更好? 有關系嗎? 使用CC++均可為我工作。

這在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版本需要使用mallocrealloc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM