如何在Python中获取Google protobuf消息的二进制序列化?
我在protobuf的Python文档中看到了一个叫SerializeAsString的函数,但这个函数的意思是,它会给我一个二进制数据的字符串版本。有没有办法用Python来序列化和解析一个protobuf数据的二进制数组呢?
我们有一个C++的应用程序,它把protobuf消息作为二进制数据存储在一个文件里。我们想用Python来读取和写入这个文件。
5 个回答
0
你可以使用Python中的字符串来获取序列化的协议缓冲区数据(无论这些数据是用Python、Java、C++还是其他语言创建的,都没关系)。
这是Python版本的协议缓冲区教程中的一行代码:
address_book.ParseFromString(f.read())
1
.serializeToString()
这个方法,虽然名字里有“String”,但它其实返回的是bytes
类型,而不是str
类型。
这让人感到困惑的原因之一是,这个方法的名字没有改变,而且文档也没有更新;你只需要知道,当他们提到“String”时,其实是指bytes
。
9
Python 2(注意:已经在2020年停止更新)中的字符串可以存储二进制数据,所以SerializeAsString
这个方法会返回二进制数据。
补充说明:根据评论的反馈:“在Python 3中,SerializeToString
这个方法会返回一个字节类型的实例。”