当前位置:网站首页>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
null
​2. 在sample 包下编写 generator.go 方便我们生成后续测试数据
null
​3. 新建 serializer ,编写 二进制序列化 file.go
null
​4. 在serializer包下编写json.go指定json序列化规则
null
​5. 在serializer 包下编写一个单元测试 file_test.go
null
​6. 修改Makefile 添加一个运行测试的命令
null
​7. make test运行一下,可以观察到 temp 文件夹下分别生成了 laptop.bin和 laptop.json
null
​可以观察到,JSON 序列化结果大小 大约是 二进制序列化大小的 5倍。

proto Java 序列化

1. 编写sample.Generator 类用于生成 测试数据【相当于整合了random.go 和 generator.go】
null
​2. 编写 serializer.Serializer 类用于实现序列化
null
​3. 接下来我们编写一个单元测试SerializerTest 测试类。
null
null
​同样可以看到,这里 JSON序列化的大小大概是二进制序列化的大小的5倍跨

语言序列化测试

我们不妨更进一步,尝试一下将golang二进制序列化的结果,用Java反序列化回来
1. 我们现将Java序列化的结果删除,再将golang的二进制序列化结果拷⻉到Java项目根目录
2. 在上面的SerializerTest单元测试中,我们再添加一个
null
​3. 运行单元测试,可以看到golang序列化的结果被成功反序列化,对比golang和Java的JSON序列化 结果,证明了proto的跨语言序列化能力。
null


null
null
null

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/23b001cfc133a07da55101920