- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个简单的 C++ 应用程序,它必须将压缩数据发送到我的 API。API 在同样被压缩的应用程序中触发响应。我必须解压缩它。我正在使用 zlib 的解压缩功能,但我不知道数据有多大。有人可以帮我解决这个问题吗?如何计算和设置目标缓冲区的大小?
最佳答案
我认为 documentation对此非常清楚
ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
const Bytef *source, uLong sourceLen));Decompresses the source buffer into the destination buffer. sourceLenis the byte length of the source buffer. Upon entry, destLen is thetotal size of the destination buffer, which must be large enough tohold the entire uncompressed data. (The size of the uncompressed datamust have been saved previously by the compressor and transmitted tothe decompressor by some mechanism outside the scope of thiscompression library.) Upon exit, destLen is the actual size of theuncompressed data.
uncompress returns Z_OK if success, Z_MEM_ERROR if there was notenough memory, Z_BUF_ERROR if there was not enough room in the outputbuffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.In the case where there is not enough room, uncompress() will fill theoutput buffer with the uncompressed data up to that point.
因此 zlib 建议将未压缩的大小与压缩流一起发送。
但是我们也可以记下这句话
In the case where there is not enough room, uncompress() will fill the output buffer with the uncompressed data up to that point.
所以你可以在压缩消息的开头包含长度。然后在您的目的地开始用一个小缓冲区解压缩。它可能不会将所有内容解压缩到小缓冲区中。但是如果你一开始就写,它解压缩足够你读取数据长度。然后您可以使用它来分配/调整目标缓冲区的大小并再次使用解压缩。
根据您的用例,这可能是个好主意,也可能不是。如果您的消息大小变化不大并且程序运行时间更长,那么最好只维护一个目标缓冲区并根据需要增加该缓冲区。
关于c++ - 如何假设 zlib 解压缩后的大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570458/
一旦我看到了用C++进行某种假设的方法,例如: int x=7; assume (x==7);//if not right a red error will appear and program wi
我正在尝试测试我的数据库类。这是它的简化示例。 class Database: """ it has more methods but I show only the most important "
这只是一个思考练习,我会对任何意见感兴趣。尽管如果它有效,我可以想出一些我会使用它的方法。 传统上,如果你想对由数组或范围等形成的嵌套循环的结果执行一个函数,你会这样写: def foo(x, y)
当某些假设无效时,MSTest 是否有办法不运行测试?就像 JUnit 的“Assume.*”方法一样: //Setup Assume.assumeEquals(2, count); //Only r
为什么会出现这个警告?如果我检查边界,这并不是一个真正的假设。以及如何修复? 如果num_actions_to_skip设置为 1,而不是 2,错误消失。 谢谢 error: assuming sig
书理解和使用 C 指针 , by Richard Reese 说: The null concept is an abstraction supported by the null pointer c
所以我有两个假设,一个是 h : A -> B,另一个是 h2 : A。如何让 h3 : B 出现在我的假设中? 最佳答案 pose proof (h h2) as h3. 引入h3 : B作为新假设
我知道发生冲突的可能性很小,但如果我生成了一批 1000 个 GUID(例如),是否可以安全地假设它们都是唯一的以节省对每个 GUID 的测试? 奖励问题 测试 GUID 唯一性的最佳方法是什么?也许
这个问题已经有答案了: Jackson JSON: get node name from json-tree (5 个回答) 已关闭 7 年前。 我正在尝试迭代 JsonNode 树,并且我编写了以下
我无法弄清楚如何在 Sympy 中假设复数的正实部。Mathematica 代码示例: a = InverseFourierTransform[ R/(I omega - lambda) + Con
这个问题在这里已经有了答案: 关闭 14 年前。 重复: Do web sites really need to cater for browsers that don’t have Javascr
我使用hypothesis 已经有一段时间了。我想知道如何重用 @given parts。 我有一些大约 20 行,我将整个 @given 部分复制到几个测试用例之上。 一个简单的测试例子 @give
您好,我的 C++ 代码中有一个错误。我有 2 个 .cpp 文件和 1 个 .h 文件,我试图从头文件访问 5 个字符串和 1 个 int,但我收到一条错误消息,提示“缺少显式类型(假设为‘int’
我正在尝试使用 IAR 开发一个项目。这是错误消息:错误 [Pe260]:缺少显式类型(假定为“int”) 问候。 当我尝试:void send_data_byte(unsigned char dat
我正在处理一个数组,我想在其中添加它的一些值。在某些时候,为了仅通过一次计算即可完成此操作,它会要求数组外的索引。 有没有办法说,“如果索引在数组之外,则假定值为 0”? 有点像这样:
在 Python 2 中,我想评估一个包含文字表示的字符串。我想安全地执行此操作,所以我不想使用 eval()——相反,我已经习惯了使用 ast.literal_eval()的任务。 但是,我还想在纯
我正在对时间进行大量计算,通过添加秒数来构建相对于其他时间对象的时间对象。该代码应该在嵌入式设备和服务器上运行。大多数文档都说 time_t 是某种算术类型,通常存储自纪元以来的时间。假设 time_
我正在编写一个程序,其中大多数使用的库函数返回-1 并设置错误号。程序的行为是在发生错误时退出。要从程序外部确定确切的退出点和错误(例如使用 gdb),我想使用以下方法: err = func_1(.
这是我今天考试的一道题: 在 C 中,假设指针是严格类型化的(即,指向 int 的指针不能用于指向 char)。这会降低它的表达能力吗?如果不是,您为什么以及如何补偿此限制?如果是,如何?您还需要添加
我将星期几存储在数据库中,其中星期日 = 1,星期一 = 2 等。 在数据库查询中,我需要将日期转换为 System.DayOfWeek。 根据 MSDN : The value of the con
我是一名优秀的程序员,十分优秀!