使用Boost gzip_decompressor解压内存中的数据
Uncompress data in memory using Boost gzip_decompressor
我正在尝试使用Boost gzip_decompressor
在内存中解压缩二进制数据。根据这个答案,我改编了以下代码:
vector<char> unzip(const vector<char> compressed)
{
vector<char> decompressed = vector<char>();
boost::iostreams::filtering_ostream os;
os.push(boost::iostreams::gzip_decompressor());
os.push(boost::iostreams::back_inserter(decompressed));
boost::iostreams::write(os, &compressed[0], compressed.size());
return decompressed;
}
返回的向量长度为零。我做错了什么?我尝试在os流上调用flush()
,但它没有产生差异
您的代码为我工作与这个简单的测试程序:
#include <iostream>
#include <vector>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
std::vector<char> unzip(const std::vector<char> compressed)
{
std::vector<char> decompressed = std::vector<char>();
boost::iostreams::filtering_ostream os;
os.push(boost::iostreams::gzip_decompressor());
os.push(boost::iostreams::back_inserter(decompressed));
boost::iostreams::write(os, &compressed[0], compressed.size());
return decompressed;
}
int main() {
std::vector<char> compressed;
{
boost::iostreams::filtering_ostream os;
os.push(boost::iostreams::gzip_compressor());
os.push(boost::iostreams::back_inserter(compressed));
os << "hellon";
os.reset();
}
std::cout << "Compressed size: " << compressed.size() << 'n';
const std::vector<char> decompressed = unzip(compressed);
std::cout << std::string(decompressed.begin(), decompressed.end());
return 0;
}
你确定你的输入是用gzip而不是其他方法(例如raw deflate)压缩的吗?gzip压缩后的数据以字节1f 8b
开头。
我通常使用reset()
或将流和过滤器放在它们自己的块中以确保输出是完整的。我在上面的压缩中都做了,只是作为一个例子。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在 malloc 内存中初始化非 POD 数据
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 获取 R 数据帧的内存地址
- 将数据存储在内存中以供以后访问
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据在内存 c++ 中丢失
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 为什么 std::set 容器使用的内存比其数据大小多得多?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 内存映射C++中的流数据
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- C++来自课堂的内存数据?
- Libjpeg将图像写入内存数据
- 将内存数据PTR映射到qt输入字段