protobuf的GZIP压缩

protobuf自带压缩功能,可选的压缩算法有 GZIP 和 ZLIB

序列化至iostream

序列化示例:

std::ofstream output("scene.art", std::ofstream::out | std::ofstream::trunc | std::ofstream::binary);
OstreamOutputStream outputFileStream(&output);
GzipOutputStream::Options options;
options.format = GzipOutputStream::GZIP;
options.compression_level = _COMPRESSION_LEVEL;
GzipOutputStream gzipOutputStream(&outputFileStream, &options);
scene->SerializeToZeroCopyStream(&gzipOutputStream);

反序列化示例:

std::ifstream input("scene.art", std::ifstream::in | std::ifstream::binary);
IstreamInputStream inputFileStream(&input);
GzipInputStream GzipInputStream(&inputFileStream);
scene1->ParseFromZeroCopyStream(&GzipInputStream);

序列化至string

序列化示例:

#include <google/protobuf/io/gzip_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
std::string output;
// 压缩序列化
google::protobuf::io::GzipOutputStream::Options options;
options.format = google::protobuf::io::GzipOutputStream::GZIP;
options.compression_level = 9;
google::protobuf::io::StringOutputStream outputStream(&output);
google::protobuf::io::GzipOutputStream gzipStream(&outputStream, options);
person.SerializeToZeroCopyStream(&gzipStream)
gzipStream.Close(); //数据刷到储存中

反序列化示例:

google::protobuf::io::ArrayInputStream inputStream(output.data(), output.size());
google::protobuf::io::GzipInputStream gzipStream(&inputStream);
person.ParseFromZeroCopyStream(&gzipStream)

需要注意:
1)序列化需要用 StringOutputStream ,对应的反序列化需要用 ArrayInputStream 。没有StringinputStream类。源码中的说明如下:

2)压缩序列化的时候,必须进行 Close 或者 Flush 操作

参考链接:
protobuf 启用 GZIP 压缩功能

protobuf的GZIP压缩相关推荐

  1. 解压并安装protobuf库_通过protobuf自带gzip压缩对报文进行二次压缩

    全部在windows平台进行测试 一.编译zlib 从github上下载最新zlib代码,根据教程进行编译,是cmake工程很简单.编译安装好,找到安装目录的include.lib.bin.默认是路径 ...

  2. 启用IIS的Gzip压缩 【转】

    现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传 输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的 ...

  3. 使Apache实现gzip压缩

    众所周知,在HTTP1.1中支持gzip压缩,这样可以缩小页面的容量从而加快页面的显示速度.可以使用常用HTTP抓包工具来检测一下你的站点是否开始了gzip压缩. Apache默认的http.conf ...

  4. Node.js服务器启用Gzip压缩

    Gzip是什么 复制大神们的解释吧: GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩.我们在Linux中经常会用到后缀为.gz的文件,它们就是GZ ...

  5. nginx的gzip压缩功能

    我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...

  6. 从 Gzip 压缩 SVG 说起 — 论如何减小资源文件的大小

    原文地址:Of SVG, Minification and Gzip 原文作者:Anton Khlynovskiy 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- ...

  7. pandas使用read_csv读取数据使用skiprows参数跳过指定的数据行但保留表头、pandas使用to_csv函数将dataframe保存为gzip压缩文件

    pandas使用read_csv读取数据使用skiprows参数跳过指定的数据行但保留表头.pandas使用to_csv函数将dataframe保存为gzip压缩文件 目录

  8. Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件、zip压缩文件

    Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件.zip压缩文件 目录 Python将Pandas中Dataframe数据保存为gzip/zip文件:gz ...

  9. godaddy php5.ini,Godaddy主机如何开启GZIP压缩 | Godaddy美国主机中文指南

    为什么要开启GZIP压缩呢?原因很简单:使用GZIP压缩技术能让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到 ...

  10. gzip压缩後的javascript在ie下不加载

    URL:http://blog.iyi.cn/start/2007/07/gzipjavascriptie.html 很早之前就发现一个奇怪的问题,ie第一次打开一个页面时,javascript正常加 ...

最新文章

  1. 基于pytorch的卷积神经网络量化实现
  2. ios 3DTouch初识
  3. 多项式加法c语言数组解,急!!!!c语言:求n次多项式的加法和乘法
  4. VS2008生成DLL文件的方法、引用dll文件以及意义
  5. 支持向量机实现鸢尾花数据集分类matlab
  6. IPM: Technical model of IP right scope on Contract Item level
  7. python类有什么用_python 定制类 有什么用
  8. 线性运算和非线性运算
  9. 奥拉星插件flash下载手机版下载安装_奥拉星游戏插件
  10. OpenShift 4 之Istio-Tutorial (3) 监控微服务运行
  11. 【报告分享】食品饮料行业供应链发展与渠道变革趋势.pdf(附下载链接)
  12. 又被腾讯刷屏!果然是印钞机.....酸哭了...
  13. 函数响应式编程及ReactiveObjC学习笔记 (三)
  14. android:background
  15. mysql物业管理系统设计_小区物业管理系统的设计与实现(IDEA,SSM,MySQL)
  16. 记事本编写java_编写运行最简单的java程序——使用记事本编写java程序
  17. 老司机教你如何快速入门Linux | 小白必知
  18. 【记录】深度学习之蒸馏法训练网络
  19. arch linux简体中文,Locale (简体中文)
  20. 财务会计基础(二)复式记账法

热门文章

  1. 验证码错误的可能问题
  2. 计算机辅助设计和辅助制造简称,计算机辅助设计与制造
  3. 如何快速制作一副地图
  4. 火狐浏览器不支持html5,解决火狐浏览器扩展版本不兼容问题
  5. 批量爬取某图片网站的图片
  6. HTTP状态码404、413、500
  7. 神经系统图 基本结构图,神经系统结构图示意图
  8. java实现pdf旋转_java生成pdf旋转_如何使用Java旋转PDF文档中的图像?
  9. linux bt下载没速度慢,linux bt速度之王
  10. Java 最佳学习途径