A tour of gRPC:03 - proto 序列化 / 反序列化

在上一篇中,我们安装配置了 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 的跨语言序列化能力。




版权声明: 本文为 InfoQ 作者【BUG侦探】的原创文章。
原文链接:【http://xie.infoq.cn/article/23b001cfc133a07da55101920】。文章转载请联系作者。
评论