当前位置:网站首页>A tour of gRPC:03 - proto序列化/反序列化
A tour of gRPC:03 - proto序列化/反序列化
2022-07-07 14:59:00 【InfoQ】
在上一篇中,我们安装配置了protoc,编写了一些简单的message,并使用protoc自动生成了代码。在本篇中,我们将尝试proto的序列化功能,并且尝试在不同的语言之间进行序列化和反序列化。
proto go 序列化
1. 新建sample包,为了方便进行测试,我们编写一个可以生成随机数据的random.go

2. 在sample 包下编写 generator.go 方便我们生成后续测试数据

3. 新建 serializer ,编写 二进制序列化 file.go

4. 在serializer包下编写json.go指定json序列化规则

5. 在serializer 包下编写一个单元测试 file_test.go

6. 修改Makefile 添加一个运行测试的命令

7. make test运行一下,可以观察到 temp 文件夹下分别生成了 laptop.bin和 laptop.json

可以观察到,JSON 序列化结果大小 大约是 二进制序列化大小的 5倍。
proto Java 序列化
1. 编写sample.Generator 类用于生成 测试数据【相当于整合了random.go 和 generator.go】

2. 编写 serializer.Serializer 类用于实现序列化

3. 接下来我们编写一个单元测试SerializerTest 测试类。


同样可以看到,这里 JSON序列化的大小大概是二进制序列化的大小的5倍跨
语言序列化测试
我们不妨更进一步,尝试一下将golang二进制序列化的结果,用Java反序列化回来
1. 我们现将Java序列化的结果删除,再将golang的二进制序列化结果拷⻉到Java项目根目录
2. 在上面的SerializerTest单元测试中,我们再添加一个

3. 运行单元测试,可以看到golang序列化的结果被成功反序列化,对比golang和Java的JSON序列化 结果,证明了proto的跨语言序列化能力。




边栏推荐
- Cesium(3):ThirdParty/zip. js
- JS 模块化
- HAVE FUN | “飞船计划”活动最新进展
- Laravel service provider instance tutorial - create a service provider test instance
- AutoLISP series (1): function function 1
- PHP has its own filtering and escape functions
- Prometheus API deletes all data of a specified job
- Laravel post shows an exception when submitting data
- 模块六
- 47_ Contour lookup in opencv cv:: findcontours()
猜你喜欢
随机推荐
AutoLISP series (1): function function 1
Asyncio concept and usage
水平垂直居中 方法 和兼容
Horizontal and vertical centering method and compatibility
记一次项目的迁移过程
【DesignMode】外观模式 (facade patterns)
整理几个重要的Android知识,高级Android开发面试题
How can laravel get the public path
Sqlserver2014+: create indexes while creating tables
php 自带过滤和转义函数
SqlServer2014+: 创建表的同时创建索引
Cesium(3):ThirdParty/zip. js
47_ Contour lookup in opencv cv:: findcontours()
PHP实现微信小程序人脸识别刷脸登录功能
【Android -- 数据存储】使用 SQLite 存储数据
射线与OBB相交检测
掌握这个提升路径,面试资料分享
AutoLISP series (2): function function 2
Introduction and use of gateway
记录Servlet学习时的一次乱码
![[medical segmentation] attention Unet](/img/f4/cf5b8fe543a19a5554897a09b26e68.png)







