如何从 zlib 确定 gzip 数据的压缩大小?

2023-12-20

我正在使用 zlib 执行 gzip 压缩。 zlib 将数据压缩后直接写入打开的 TCP 套接字。

/* socket_fd is a file descriptor for an open TCP socket */
gzFile gzf = gzdopen(socket_fd, "wb");
int uncompressed_bytes_consumed = gzwrite(gzf, buffer, 1024);

(当然所有错误处理都被删除)

问题是:如何确定有多少字节写入了套接字? zlib 中的所有 gz* 函数都处理未压缩域中的字节计数/偏移量,并且tell(seek)不适用于套接字。

zlib.h 标头显示“该库也可以选择在内存中读取和写入 gzip 流。”写入缓冲区是可行的(然后我可以随后将缓冲区写入套接字),但我不知道如何使用接口来做到这一点。


您可以使用deflate*一连串的电话。我不会向您展示所有内容,但这个示例程序(我在目录中将其命名为“test.c”)应该可以帮助您入门:

#include <zlib.h>
#include <stdlib.h>
#include <stdio.h>

char InputBufferA[4096];
char OutputBufferA[4096];

int main(int argc, char *argv[])
{
    z_stream Stream;
    int InputSize;
    FILE *FileP;

    Stream.zalloc = malloc;
    Stream.zfree = free;
    /* initialize compression */
    deflateInit(&Stream, 3);
    FileP = fopen("test.c", "rb");
    InputSize = fread((void *) InputBufferA, 1, sizeof(InputBufferA), FileP);
    fclose(FileP);
    Stream.next_in = InputBufferA;
    Stream.avail_in = InputSize;
    Stream.next_out = OutputBufferA;
    Stream.avail_out = sizeof(OutputBufferA);
    deflate(&Stream, Z_SYNC_FLUSH);
    /* OutputBufferA is now filled in with the compressed data. */
    printf("%d bytes input compressed to %d bytes\n", Stream.total_in, Stream.total_out);
    exit(0);
}

咨询deflate文档来自zlib.h.

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

如何从 zlib 确定 gzip 数据的压缩大小? 的相关文章

  • 用 C 语言进行非阻塞 udp 套接字编程:我能得到什么?

    我在理解从非阻塞 UDP 套接字返回什么recv recvfrom 时遇到问题 与 TCP 相比更具体一点 如果我错了 请纠正我 阻塞套接字 TCP 或 UDP 在缓冲区中有一些数据之前不会从 recv 返回 这可以是一定数量的字节 TCP
  • 为什么socket会干扰selenium?

    我编写了一个 python 脚本来使用套接字检查互联网连接 检查网络连接 https stackoverflow com questions 3764291 checking network connection 然后使用 selenium
  • 什么时候 htonl(x) != ntohl(x) ? (或者什么时候在同一台机器上网络字节顺序的转换不等效?)

    关于htonl http linux die net man 3 htonl and ntohl http linux die net man 3 htonl 这两行代码何时计算结果为 false htonl x ntohl x htonl
  • 创建 ip 网络数据包 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须使用任何协议手动创建自己的网络
  • 无法连接到非阻塞套接字

    这让我抓狂 我必须在 php 5 3 中创建一个非常简单的非阻塞套接字脚本 其中客户端连接到服务器 两者都使用非阻塞套接字 我试过了phpsocket守护进程 http code google com p phpsocketdaemon 和
  • 是否可以同时读取和写入 java.net.Socket?

    是否可以同时从套接字读取和写入 我有一个连续读取套接字的线程 由于只有一个线程正在从套接字读取数据 因此读取操作是线程安全的 现在我有很多线程 比如100 写入套接字 因此 很明显 我必须通过这样做来使写操作线程安全 package com
  • mmap 和 gzip 可以协作吗?

    我试图弄清楚如何将 mmap 与 gzip 压缩文件一起使用 这可能吗 import mmap import os import gzip filename r C temp data gz file gzip open filename
  • Chrome 在传输一定量的数据后挂起 - 等待可用的套接字

    我有一个浏览器游戏 最近我开始向游戏添加音频 Chrome 无法加载整个页面并卡在 91 requests 8 1 MB transferred 并且不再加载任何内容 它甚至破坏了所有其他选项卡中的网站 说Waiting for avail
  • 跨 NAT 的 UDP 客户端无法从服务器接收数据

    我正在尝试在服务器 在公共 IP 上 和客户端 跨 NAT 之间使用 UDP 进行双向通信 我的逻辑是 如果服务器将一些数据发送到 IP 和它接收数据包的端口 客户端仍然应该收到它 因为 NAT 将具有最终将数据包发送到客户端的映射 客户端
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • UDP SocketException - 通常只允许每个套接字地址使用一次

    尽管这里有很多非常相似的问题 但提供的答案都没有帮助我 这让我很难过 我有一个非常大的管理系统 我的任务是为其编写一些 UDP 数据包发送 接收 我已经编写了一个原型 一切都很好 所以我开始将我的代码合并到所述系统中 然而 我现在弹出了一个
  • 如何用单线程实现TCP上的全双工通道?

    我正在编写的网络库需要通过 TCP 套接字发送和接收消息 消息可以随时发送或接收 即应该作为全双工通道工作 我能够使用两个线程来实现这样的场景 调用 send 的主线程和一个主要在 receive 调用处阻塞的专用线程 我的问题是 是否可以
  • 从物理上来说,套接字是什么?

    我总是更喜欢编程概念的物理含义而不是其逻辑含义 那么这个问题就来了 当我回顾套接字编程范例时 我注意到bind 连接 函数所做的就像tuning由创建的套接字socket 功能 所以我想那是什么socket 函数所做的只是创建一个数据结构
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 如何将 Flutter 应用连接到 tcp 套接字服务器?

    我很难将 Flutter 应用程序连接到服务器上的网络 tcp 套接字 我知道我必须使用某种中间选项 以便在 tcp 套接字到 flutter 以及 Flutter 到 tcp 套接字之间转换数据 任何想法 信息如何实现这一目标 问题是如何
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 可以访问每个套接字的 TCP 统计数据/信息吗? (C/C++)

    我需要一些信息 例如我创建的特定 TCP 套接字发生的重新发送包 数据包丢失的数量 有人知道如何直接从我的 C C 程序访问或请求此类信息吗 也许是 Linux 特有的东西 或者我是否需要 作为解决方法 捕获和分析我自己的流量 提前致谢 通
  • Socket.io - “套接字 ID”是否被视为敏感信息?

    我正在使用 Node js 和 socket io 实现一个简单的聊天应用程序 想知道在整个对象中共享所有客户端的套接字 ID 是否被认为是一个好的做法 为了解释一下 我的每个用户都是这样表示的 nick John Doe dateJoin
  • 如何禁用 fread() 中的缓冲?

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

随机推荐

  • 在 value="" 属性中打印 JS 变量

    我正在尝试实现一个具有动态值的 Paypal 按钮 例如 当我输入 value 300 00 时 该按钮工作正常 但是 如果我按照我的方式操作 该按钮将无法正常工作 变量价格是 JS 变量 它保存我需要放入 Paypal 按钮的信息 这是有
  • 如何获取拖放到控制台应用程序窗口上的项目的文件路径?

    我希望能够让用户将文件拖放到我的控制台应用程序的窗口上 这样他们就不会被迫将文件拖放到应用程序的图标 或链接 或者更糟糕的是在控制台中编写命令行 如何获取拖放到应用程序窗口中的文件的路径列表 你可以只听键盘的声音 将文件拖到控制台窗口时 窗
  • 使用 VBA 将 Round 函数插入当前单元格

    我试图让将 Round 函数插入到许多已经有公式的单元格中变得更容易 例如 如果单元格 A1 具有公式 b1 b2 使用这个宏后 我想要读取单元格内容 Round b1 b2 每个单元格中的公式都不相同 因此b1 b2部分必须是任何东西 我
  • React Router 4 - componentWillReceiveProps() 不触发

    我正在使用 React Router 4 当我使用渲染参数 componentWillReceiveProps 渲染组件时 它不会第一次触发 因此我需要单击两次才能将道具发送到组件 我这样渲染 const CartRoute props g
  • 如何生成具有指数分布(具有均值)的随机数?

    我正在尝试生成均值等于 1 的指数分布随机数 我知道如何获取均值和标准差正态分布的随机数 我们可以通过normal mean standard deviation 但我不知道如何获得指数分布的随机数 谁能帮我这个 With C 11该标准实
  • 编译时递归和条件

    我正在阅读以下回复 在没有循环或条件的情况下打印 1 到 1000 https stackoverflow com questions 4568645 printing 1 to 1000 without loop or condition
  • 如何使代码块输出在 quarto Revealjs 演示文稿中水平滚动

    我之前使用 R 中的 xaringan 包做了一个可滚动代码块输出的演示 如下图所示 我想在 quarto Revealjs 演示文稿中制作相同的可滚动代码块输出 有人知道如何在四开演示文稿中做到这一点吗 scrollable code c
  • 在magento中通过电子邮件ID获取有关客户的信息

    我想通过电子邮件 ID 获取客户信息 因此我在控制器中创建一个方法 内容如下 public function showAction customer email email protected cdn cgi l email protect
  • Solr suggest - 如何将 solr suggest 定义为不区分大小写

    我的建议 拼写检查器 返回区分大小写的答案 我用它来自动完成 狗和狗返回不同的短语 我的建议定义如下 在 solrconfig 中
  • 强制 jQuery Mobile 重新评估动态插入内容的样式/主题

    客观的 通过加载 HTML 内容 ajax 将其插入 DOM 让 jQuery Mobile 应用主题样式 Problem 内容已插入 但缺少 jQuery Mobile 主题 Code ajax success function html
  • 从 vb 确定 Url 是绝对的还是相对的 [重复]

    这个问题在这里已经有答案了 我试图在 vb 中确定 URL 是绝对的还是相对的 我确信必须有一些库可以做到这一点 但我不确定是哪个 基本上我需要能够分析字符串 例如 相对 路径 和或 http www absolutepath com su
  • Swift 3 iMessage 扩展无法打开 URL

    我正在创建一个 iOS 应用程序 iMessage 扩展 根据苹果的例子 https developer apple com library prerelease content samplecode IceCreamBuilder Int
  • Cypress - 检查文件是否已下载

    我在尝试检查文件是否已下载时遇到了一些问题 单击按钮生成 PDF 文件并开始下载 我需要检查它是否有效 赛普拉斯能做到吗 赛普拉斯 插件 index js const path require path const fs require f
  • 为什么我不能在抽象 C# 类上创建抽象构造函数?

    我正在创建一个抽象类 我希望我的每个派生类都被迫实现构造函数的特定签名 因此 如果我想强迫他们实现一种方法 我做了我会做的事情 我做了一个抽象的方法 public abstract class A abstract A int a int
  • Typescript 中带有 Observable 的 XMLHttpRequest

    当我尝试管理上传文件的 XMLHttpRequest 调用的结果时 我遇到了 tslint 问题 这是我目前在互联网上找到的方法 Files upload request makeFileRequest url string files A
  • 如何使用 CURLOPT_HEADERFUNCTION 读取单个响应标头字段?

    我正在实现一个 C 程序 它需要从读取远程文件的大小Content Length标题 当Content Length在响应标头中发送 我查看了 libcurl 的文档 到目前为止我能想到的最好的方法是回调函数CURLOPT HEADERFU
  • 在 Access VBA 中实施正则表达式以提高密码复杂性

    我目前正在开发一个需要密码验证的项目 因为最终用户可以更改其登录密码 但没有验证来确保给定的密码符合规定 这有点棘手 因为我对使用 VBA 和正则表达式相当陌生 而且我找不到我正在寻找的答案 该项目有一个 Access 2010 前端 虽然
  • 如何在 MySQL 中强制复合唯一性?

    我遇到了一种情况 我想确保表的复合元素是唯一的 例如 Table id char 36 primary key fieldA varChar 12 not null fieldB varChar 36 not null 我不希望 field
  • CentOS安装mod_dav_svn

    我正在尝试在 centos 5 VPS 上安装 subversion 我设法安装了 subversion 但是当我尝试这样做时yum install mod dav svn我收到此错误 错误 缺少依赖项 httpd mmn 包裹需要2005
  • 如何从 zlib 确定 gzip 数据的压缩大小?

    我正在使用 zlib 执行 gzip 压缩 zlib 将数据压缩后直接写入打开的 TCP 套接字 socket fd is a file descriptor for an open TCP socket gzFile gzf gzdope