Protobuf对比XML、Json等其他序列化的优势

  1. protobuf 不管是处理时间上,还是空间占用上都优于现有的其他序列化方式。内存暂用是java 序列化的1/9,时间也是差了一个数量级,一次操作在1us左右。缺点:就是对象结构体有限制,只适合于内部系统使用。
  2. json格式在空间占用还是有一些优势,是java序列化的1/2.6。序列化和反序列化处理时间上差不多,也就在5us。当然这次使用的jackson,如果使用普通的jsonlib可能没有这样好的性能,jsonlib估计跟java序列化差不多。
  3. xml相比于java序列化来说,空间占用上有点优势,但不明显。处理时间上比java序列化多了一个数量级,在100us左右。
  4. 以前一种的java序列化,表现得有些失望
  5. hessian测试有点意外,具体序列化数据上还步入json。性能上也不如jackjson,输得比较彻底。
  6. hessian使用压缩,虽然在字节上有20%以上的空间提升,但性能上差了4,5倍,典型的以时间换空间。总的来说还是google protobuf比较给力

protobuf jackson xstream Serializable hessian2 hessian2压缩 hessian1
序列化(单位ns) 1154 5421  92406  10189 26794 100766 29027
反序列化(单位ns) 1334 8743  117329  64027 37871 188432 37596
bytes 97 311  664  824 374 283 495

准备环境:

1,Python版本3.5.4

2,Protobuf版本3.7.0

3,Protobuf安装包:protoc-3.7.0-rc1-win64.zip

4,Win10 64位系统

步骤:

【下载protoc】

https://github.com/google/protobuf/releases

根据自己的平台下载对应的编译器,我的是win10-64位,所以下载  protoc-3.7.0-rc1-win64.zip

设置环境变量:这一步使你在本地任何地方使用protoc这个指令

(右击“此电脑”。。。)

测试protoc:

新打开一个命令行:输入protoc --version,如果将输出版本号,说明protoc安装好了

【编写.proto协议文件】

新建一个protobuf文件夹,手动创建test2.proto文件:

并在test2.proto中输入:

syntax = "proto2";
message testinfo
{
required int32 devtype = 1;
required int32 devid = 2;
required int32 unitid = 3;
required int32 chlid = 4;
optional int32 testid = 5 [default = 0];
required bytes stepdata = 6;
}

【编译】:

打开命令行,切换到protobuf文件夹下下面,执行protoc --python_out=./ test2.proto

然后会生成一个python文件

在目录下新建文件 test.py,写入代码

import test2_pb2

testinfo = test2_pb2.testinfo()
testinfo.devtype = 100
testinfo.devid = 2
testinfo.unitid = 3
testinfo.chlid = 4
testinfo.testid = 250
testinfo.stepdata = b'abd' print(testinfo, testinfo.devtype) # 打印 protobuf 结构的内容
out = testinfo.SerializeToString()
print(out) # 打印 Protobuf 序列字符串 decode = test2_pb2.testinfo()
decode.ParseFromString(out) print(decode) # 打印 解析Protobuf后的内容

运行python代码,得到以下结果,证明实验成功!

Windows 10 搭建Python3 安装使用 protobuf的更多相关文章

  1. tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 原文见于:http://www.jianshu.com/p/c245d46d43f0 ...

  2. DB 查询分析器 6.04 在 Windows 10 上的安装与运行展示

    DB查询分析器 6.04 在 Windows 10 上的安装与运行展示 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员 http://www.csdn.net/art ...

  3. Windows 10 搭建 Django 环境(详细教程)

    Windows 10 搭建 Django 环境(详细教程) https://blog.csdn.net/HappyLittleMouse/article/details/81360272#1.%20P ...

  4. windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    原文地址:http://www.jianshu.com/p/c245d46d43f0 写在前面的话 2016年11月29日,Google Brain 工程师团队宣布在 TensorFlow 0.12 ...

  5. 在windows 10家庭版上安装docker的步骤

    本人之前写Redis书和Spring Cloud Alibaba书时,发现一些分布式组件更适合安装在linux环境,而在搭建Redis等集群时,更需要linux环境. 本人日常练习代码和写书所用的机器 ...

  6. windows 10 & Office 2016 安装

    Office 2016 VOL版    http://blog.sina.com.cn/s/blog_470614a90102vtmc.html 专业版合集: magnet:?xt=urn:btih: ...

  7. [原][工具][windows10安装][0x800F081F]windows 10 如何离线安装.net framework3.5 || 安装出现错误代码0x800F081F时如何解决

    参考解决方案:https://zhidao.baidu.com/question/1896669183365806820.html?fr=iks&word=win10%B0%B2%D7%B0+ ...

  8. windows 10 服务组件安装出现0x80070422错误解决方法

    问题描述:   windows 10通过控制面板->程序->启用或关闭Windows 功能安装Windows服务或组件时,出现0x80070422错误,提示服务禁止或未启用 问题产生原因: ...

  9. 配置环境是程序员的第一步 -- Windows 10 下 MySQL 安装

    MySQL 作为最典型的关系型数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是其开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.MySQL 社区版的功能也足够我们 ...

随机推荐

  1. Flutter——Card组件

    Card 是卡片组件块,内容可以由大多数类型的 Widget 构成,Card 具有圆角和阴影,这让它看起来有立体感.   Card组件的常用属性: 属性 说明 margin 外边距 child 子组件 ...

  2. 【2018-01-26】SqlServer 检查死锁和阻塞

    利用sys.sysprocesses SQL进程检查是否出现死锁和阻塞 Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 select ...

  3. python之闲聊数据类型及常用操作符

    Day 1-afternoon 所谓闲聊,也称gossip.下面开始... 整型 python3 的整型与长整型进行了无缝结合,长度不受限制. 浮点型 包括科学计数法 E.(用法同C) 布尔类型 即特 ...

  4. 0012SpringBoot访问首页

    有三种方式可以实现访问首页: 第一种: 定义一个Controller,定义请求方法和返回内容,方法内容如下: @RequestMapping({"/","/index&q ...

  5. 图片转换成十六进制TXT文件

    最近学习了图片的转换,就学习了一下图片从二进制转换成十六进制,十六进制TXT文件转换成图片形式. using System; using System.Collections.Generic; usi ...

  6. 前端知识体系:JavaScript基础-作用域和闭包-闭包的实现原理和作用以及堆栈溢出和内存泄漏原理和相应解决办法

    闭包的实现原理和作用 闭包: 有权访问另一个函数作用域中的变量的函数. 创建闭包的常见方式就是,在一个函数中创建另一个函数. 闭包的作用: 访问函数内部变量.保持函数在环境中一直存在,不会被垃圾回收机 ...

  7. BZOJ3122 随机数生成器——BSGS

    题意 链接 给定 $p,\ a,\ b, \ x_1$,现有一数列 $$x_{i+1} \equiv (ax_i + b) \ mod \ p$$ 求最小的 $i$ 满足 $x_i = t$ 分析 代 ...

  8. [Functional Programming] Using ComposeK for both get State and modify State

    We have State like this: const state = { cards: [ { id: "green-square", color: "green ...

  9. CF46F Hercule Poirot Problem

    题意: 有n个房间和m扇门,每扇门有且仅有一把钥匙 有k个人度过了两天,在第一天开始的时候所有的门都是关闭的,在第二天结束的时候,所有的门也都是关闭的 在这两天内,每个人可以执行如下操作若干次: 关上 ...

  10. P2272 [ZJOI2007]最大半连通子图 tarjan+DP

    思路:$tarjan+DP$ 提交:1次 题解:首先对于一个强连通分量一定是一个半连通分量,并且形成的半连通分量的大小一定是它的$size$,所以我们先缩点. 这样,我们相当于要在新的$DAG$上找一 ...