bundle的下载和使用

1.bundle 的概要

BundleBundle 是一个嵌入式压缩库(嵌入是指直接嵌入到代码中,可以直接使用无需编译),支持 23 种压缩算法和 2 种存档格式。

2.bundle 的使用

使用的时候只需要手动拷贝添加两个 bundle.hbundle.cpp 文件即可,简单易用,这也是为什么我推荐这个库的原因之一。您直接前往对应的 git 仓库(https://github.com/r-lyeh-archived/bundle)进行下载即可。我们来尝试使用一下代码,再来进行总结。

cpp 复制代码
//pack.cpp
#include <iostream>
#include <string>
#include <fstream>
#include "bundle.h"

int main(int argc, char const *argv[])
{
    //1.获取文件名字
    if (argc < 3) return -1;
    std::cout << "原始文件路径" << argv[1];
    std::cout << "压缩文件路径" << argv[2];
    std::string iFileName = argv[1];
    std::string oFileName = argv[2];

    //2.获取原始文件的大小
    std::ifstream ifs;
    ifs.open(iFileName, std::ios::binary);
    ifs.seekg(0, std::ios::end); //偏移量 off, 基准 way, 这里就将文件读取位置移动到文件的末尾
    size_t fsize = ifs.tellg(); //获取到文件大小
    ifs.seekg(0, std::ios::beg);

    //3.读取文件内容到文件流中
    std::string body;
    body.resize(fsize); //调整为打开文件的大小
    ifs.read(&body[0], fsize); //读取文件的内容
    ifs.close();

    //4.将原始文件转化为压缩文件
    std::string packed = bundle::pack(bundle::LZIP, body); //选择 LZIP 格式对文件内容进行压缩
    std::ofstream ofs;
    ofs.open(oFileName, std::ios::binary);
    ofs.write(&packed[0], packed.size()); //保存压缩后的内容
    ofs.close();

    //5.回显压缩信息
    std::cout
        << "压缩成功" << std::endl
        << "压缩前:" << fsize << " "
        << "压缩后:" << packed.size()
        << std::endl;

    return 0;
}
cpp 复制代码
//unpack.hpp
#include <iostream>
#include <string>
#include <fstream>
#include "bundle.h"

int main(int argc, char const *argv[])
{
    //1.获取文件名字
    if (argc < 3) return -1;
    std::cout << "原始文件路径" << argv[1];
    std::cout << "解缩文件路径" << argv[2];
    std::string iFileName = argv[1];
    std::string oFileName = argv[2];

    //2.获取原始文件的大小
    std::ifstream ifs;
    ifs.open(iFileName, std::ios::binary);
    ifs.seekg(0, std::ios::end); //偏移量 off, 基准 way, 这里就将文件读取位置移动到文件的末尾
    size_t fsize = ifs.tellg(); //获取到文件大小
    ifs.seekg(0, std::ios::beg);

    //3.读取文件内容到文件流中
    std::string body;
    body.resize(fsize); //调整为打开文件的大小
    ifs.read(&body[0], fsize); //读取文件的内容
    ifs.close();

    //4.将原始文件转化为解缩文件
    std::string unpacked = bundle::unpack(body); //直接进行解缩
    std::ofstream ofs;
    ofs.open(oFileName, std::ios::binary);
    ofs.write(&unpacked[0], unpacked.size()); //保存压缩后的内容
    ofs.close();

    //5.回显压缩信息
    std::cout
        << "解压成功" << std::endl
        << "解压前:" << fsize << " "
        << "解压后:" << unpacked.size()
        << std::endl;

    return 0;
}

我们可以通过 md5sum "文件名" 计算 md5 值来检查文件解压前和解压后内容是否相同(内容相同则 md5 值相同)

因此实际上这个库使用起来非常简单,单纯选择压缩方式然后使用 bundle::pack() 压缩即可,解压无需选择解压方式,直接调用 bundle::unpack()

相关推荐
6Hzlia4 分钟前
【Classic 150 刷题计划】 LeetCode 274. H 指数 | C++ 二分答案法 (单调性降维打击)
c++·算法·leetcode
_JoeZoe7 分钟前
阿里云开发者社区用户服务协议
c语言·编译器·历史·应用领域·unix操作系统
老王爱玩车10 分钟前
第2讲:C语言数据类型和变量
c语言·开发语言
零依赖极客31 分钟前
Day 9·1 KV 也量化——q8 KV 把缓存与 decode 带宽压到一半
c语言·开发语言·arm开发·人工智能·缓存·矩阵
码匠许师傅1 小时前
【C++三方组件】nlohmann/json:像写 STL 一样操作 JSON
c++
Yingye Zhu(HPXXZYY)1 小时前
洛谷B4337 [中山市赛 2023] 简单数学题
c++·算法
郝学胜-神的一滴1 小时前
C++11 工程级应用 12:编译期类型魔法,干掉重复与臃肿的代码
开发语言·数据结构·c++·软件工程·visual studio
个 人 练 习 生1 小时前
数据结构:排序算法详解
c语言·数据结构·经验分享·学习·算法·排序算法
m0_734571761 小时前
深入理解C++ 析构函数<四>虚析构函数
开发语言·c++
老当益壮梁奶奶1 小时前
51单片机中断系统详解
c语言·单片机·嵌入式硬件·学习·51单片机