中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C++中gzip壓縮的流操作有哪些

c++
小樊
81
2024-08-11 11:47:38
欄目: 編程語言

在C++中,可以使用zlib庫來進行gzip壓縮和解壓縮的操作。以下是使用zlib庫進行gzip壓縮和解壓縮的流操作:

  1. 壓縮數據流:
#include <zlib.h>

std::string compressData(const std::string& data)
{
    z_stream strm;
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    strm.next_in = (Bytef*)data.data();
    strm.avail_in = data.size();

    if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 | 16, 8, Z_DEFAULT_STRATEGY) != Z_OK)
    {
        return "";
    }

    std::string compressedData;
    char out[1024];

    do
    {
        strm.next_out = (Bytef*)out;
        strm.avail_out = sizeof(out);

        if (deflate(&strm, Z_FINISH) == Z_STREAM_ERROR)
        {
            deflateEnd(&strm);
            return "";
        }

        compressedData.append(out, sizeof(out) - strm.avail_out);
    } while (strm.avail_out == 0);

    deflateEnd(&strm);

    return compressedData;
}

  1. 解壓縮數據流:
#include <zlib.h>

std::string decompressData(const std::string& compressedData)
{
    z_stream strm;
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    strm.next_in = (Bytef*)compressedData.data();
    strm.avail_in = compressedData.size();

    if (inflateInit2(&strm, 15 | 16) != Z_OK)
    {
        return "";
    }

    std::string decompressedData;
    char out[1024];

    do
    {
        strm.next_out = (Bytef*)out;
        strm.avail_out = sizeof(out);

        if (inflate(&strm, Z_NO_FLUSH) == Z_STREAM_ERROR)
        {
            inflateEnd(&strm);
            return "";
        }

        decompressedData.append(out, sizeof(out) - strm.avail_out);
    } while (strm.avail_out == 0);

    inflateEnd(&strm);

    return decompressedData;
}

0
东兰县| 河间市| 靖西县| 和平区| 平顶山市| 新田县| 洪雅县| 镇雄县| 华阴市| 赤水市| 扬中市| 宽城| 万宁市| 图们市| 桓仁| 云霄县| 渭源县| 光山县| 绿春县| 嘉鱼县| 苍溪县| 绥中县| 辰溪县| 陕西省| 博客| 海门市| 洪湖市| 贵定县| 巍山| 北京市| 青冈县| 宁武县| 潞城市| 乌兰浩特市| 大丰市| 西城区| 革吉县| 泰和县| 乌鲁木齐县| 津南区| 南安市|