使用 Boost gzip_decompressor 解压缩内存中的数据

2023-12-11

我正在尝试使用 Boost 解压缩内存中的二进制数据gzip_decompressor. From 这个答案,我改编了以下代码:

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;
}

但是,返回的向量的长度为零。我究竟做错了什么?我尝试打电话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 << "hello\n";
      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()或者将流和过滤器放在各自的块中以确保输出完整。我在上面都做了压缩,只是作为一个例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Boost gzip_decompressor 解压缩内存中的数据 的相关文章

  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 解释一下 AF 标志在 x86 指令中如何工作?

    我有一个小型 8086 模拟器 并且我已经有一个长期存在的错误了大约 2 年 因为 AF 在 sub 和 add 指令内无法正常运行 我当前计算其值的方法是 8 位数字和减法 uint8 t base subt base base 0xF
  • 如何将嵌套组框中的单选按钮设置为与该组框外部的单选按钮相同的组[重复]

    这个问题在这里已经有答案了 我有 winform 应用程序 NET 4 0 有没有办法手动设置一组单选按钮 我有四个单选按钮 其中两个位于组框内 另外两个位于该框外 如何将它们全部设置为同一组 这可能已经在另一篇文章中得到了回答 听起来是一
  • 运行 Azure 函数时路径中存在非法字符

    我有一个 Azure 函数 它已经运行了一整天 大约二十分钟前 当我尝试单击 Visual Studio 中的运行按钮时 开始出现错误 它成功构建 然后在启动时显示并错误 仅指出 路径中的非法字符 Visual Studio 我检查了 gi
  • 重叠 I/O 的 GetOverlappedResult(bWait=TRUE) 与 WaitForSingleObject()

    当我在 Win32 api 上以重叠方式打开和读取文件时 我有几种方法来完成 IO 请求 包括等待文件句柄 或重叠结构中的事件 WaitForSingleObject GetOverlappedResultbWait TRUE 这两个函数似

随机推荐

  • 计算 128 位整数中前导零的数量

    如何计算 128 位整数中前导零的数量 uint128 t 有效率的 我知道GCC的内置函数 builtin clz builtin clzl builtin clzll builtin ffs builtin ffsl builtin f
  • 如何使用聚合物将 HTML 注入模板

    我正在使用polymer jsonp 执行 JSONP 请求 但响应有时包含 html 例如 假设 post content 是 strong Foo strong bar 我怎样才能显示 post content 这样 Foo 是粗体吗
  • 如何将字符串放入矩形内?

    我正在尝试将一些字符串 图像和表格添加到我的 pdf 文件中 必须有几页 但是当我尝试使用ColumnText 我使用这个是因为我想将字符串放置在绝对位置 我遇到了一个问题 当列高不足以添加字符串内容时 内容不完整 如何避免内容丢失 这是相
  • 比较一个字符串与几个不同的字符串

    我想将一个字符串与多个字符串进行比较 在 C 中这是如何完成的 如果你想检查一个字符串是否包含在字符串列表中 你可以使用Contains扩展方法 bool isStringContainedInList new string1 string
  • HttpServletRequest getLocale 返回操作系统区域设置而不是浏览器区域设置

    我正在使用 vaadin 框架 在我的应用程序中我有 Override public void onRequestStart HttpServletRequest request HttpServletResponse response c
  • 如何使用 shell 脚本将 HiveQL 查询的结果输出到 CSV?

    我想运行多个 Hive 查询 最好是并行而不是顺序运行 并将每个查询的输出存储到 csv 文件中 例如 query1输出在csv1 query2输出在csv2等等 我会在下班后运行这些查询 目标是在下一个工作日分析输出 我对使用 bash
  • 如何解决 Pandas 中的错误“远程过程调用协议流中传入的表格数据流不正确”

    我有一个 pandas 数据框 正在将其写入 SQL Server 中的表中 数据框包含以下数据类型 Contact ID object Skill No float64 Skill Name object Campaign No floa
  • 什么是“不完全构造的对象”?

    Goetz s Java 并发实践 第 41 页 提到如何this引用可以在构造过程中逃逸 一个 不要这样做 的例子 public class ThisEscape public ThisEscape EventSource source
  • 正则表达式仅匹配整数

    正如标题所述 我正在尝试构建一个正则表达式来从字符串中提取整数 实际情况是 我有一个非常大的代码文件 整数 和一些值 小数 我可以成功提取小数 d d 这可能看起来很奇怪 但我也捕获了 1 或 1 但是我无法提取整数 直到现在我有类似的东西
  • 为什么在 Java 中循环内声明似乎比循环外声明更快?

    当我检查这个时Question不敢相信 所以我测试了一下 似乎是真的 循环内声明似乎比循环外声明更快 有人可以解释这是为什么吗 这是我的测试代码 public class CycleTest param args the command l
  • 如何将 sys.stdout 复制到日志文件?

    编辑 因为看起来要么没有解决方案 要么我正在做一些非常不标准的事情以至于没有人知道 我将修改我的问题以询问 当 python 应用程序正在制作时完成日志记录的最佳方法是什么很多系统调用 我的应用程序有两种模式 在交互模式下 我希望所有输出都
  • JavaScript - 获取浏览器高度

    我正在寻找一个代码片段来获取浏览器窗口中可视区域的高度 我有这段代码 但是它有些问题 好像主体没有超过窗口的高度 然后它会变短 document body clientHeight 我尝试了其他一些方法 但它们要么返回 NaN 要么返回与上
  • 如何解绑和重新绑定

    archive click function event do something archive2 unbind click event 我有这个点击功能 我取消了绑定 但是 当我单击某个按钮时 我想再次绑定它 archive bind
  • 如何设置 SQL Server 2005 作业 CmdExec 超时

    我在 SQL Server 2005 中有一个作业设置 其中有一个操作系统 CmdExec 步骤 该步骤调用一个可能需要很长时间才能运行的程序 我发现 如果程序响应时间超过 1 分 40 秒 则该步骤将失败 并显示错误消息 操作已超时 该程
  • 检测类型是否是“映射”

    我想使用它们将 C 容器解析为另一个对象 iterator会员类型 迭代器成员类型指向单一类型 向量 队列等 对象的容器将变成类列表对象 迭代器成员类型指向单一类型对象的容器std pair将变成一个类似地图的物体 我试图编写一个成员函数来
  • Polymer,如何等待 core-ajax 完成后再渲染其他元素?

    更新 以下是针对这种情况的文档 条件模板使用 if 属性有条件地创建模板实例 这个应用程序 plnkr co 应执行以下操作 使用 core ajax 组件从数据库获取project location 本例中为JSON 使用 google
  • 如何在 Eclipse 中打印到 textArea 而不是控制台?

    我目前有一个程序 可以以各种方式将文本行打印到屏幕上 例如 System out println 语句 并且 for 循环将数组中的所有元素打印到屏幕上 我现在在一个单独的类中向该程序添加一个 GUI 我的问题是我想将打印到 Eclipse
  • 带坐标的平铺网格

    我正在尝试创建一个可以用 with 或 height 指定的网格 即 10 个框宽 x 20 个高 我已经创建了一个创建网格的脚本 但我想以一种可以以与我的方式不同的宽度和高度创建网格的方式进行制作 它当前创建一个宽度与高度相等的网格 并且
  • CryptoStream 没有像预期那样刷新

    我正在处理的 C NET Framework 4 5 代码应该允许我通过加密流将文本传输到另一个程序 我创建了两个简单的程序来演示我的问题 EncryptionTestA 是服务器 并且应该首先运行 EncryptionTestB 是客户端
  • 使用 Boost gzip_decompressor 解压缩内存中的数据

    我正在尝试使用 Boost 解压缩内存中的二进制数据gzip decompressor From 这个答案 我改编了以下代码 vector