写点什么

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

作者:BUG侦探
  • 2022 年 7 月 07 日
  • 本文字数:642 字

    阅读完需:约 2 分钟

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 的跨语言序列化能力。




发布于: 刚刚阅读数: 3
用户头像

BUG侦探

关注

还未添加个人签名 2021.06.08 加入

专注于发掘程序员/工程师的有趣灵魂,对工作中的思路与总结进行闪光播报。

评论

发布
暂无评论
A tour of gRPC:03 - proto序列化/反序列化_gRPC_BUG侦探_InfoQ写作社区