将 zlib 用于 std::string 和 stringstream

Using zlib for std::string and stringstream

我正在使用 zlib 在客户端缩小字符串并在服务器端膨胀。

我找到了一个 link,它使用 char 缓冲区来完成此操作: https://gist.github.com/arq5x/5315739

有人可以 post 使用 zlib 方法的简单示例 std::stringstd::stringstream 做同样的事情吗?

编辑:请不要使用Boost,因为我正在开发一个受限制的API。

所以,我从 zlib.h 文档和下载的 zlib 附带的 examples.c 中发现,您只能使用文件或字符缓冲区进行压缩。因此,将字符串或字符串流转换为字符缓冲区。

代码如下: https://panthema.net/2007/0328-ZLibString.html

我在网上找到了一个非常有用的例子,对我有用:

blog: Compression of Simulation Data using ZLib

基本上,使用 gzwrite 和 gzread 进行写入和读取就像写入常规文件一样。写的时候先写字符串大小,再写字符串。阅读顺序相同。读的时候,先读入一个std::string的obj,然后就可以将string obj转成istringstream:

std::istringstream in(data);  // data is std::string type, using the same notation as in the blog

为了写,把ostringstream obj转成std::string obj包装成函数也可能更灵活