python-3.x - 使用 Python 的 Protocol Buffer 选择使用 SerializeToString 的数据顺序

标签 python-3.x serialization protocol-buffers protoc

我有一个用 protocol-buffer 编码的缓冲区,我想读取缓冲区并更改一些数据并再次编码。

我看到当我对缓冲区 (SerializeToString) 进行编码时,二进制数据不相同,因此获取该缓冲区的服务器无法对其进行解码。

import messages_pb2
with open('proto.bin','rb') as f:
    buffer1 = f.read()
my_obj1 = messages_pb2.MyObj()
my_obj1.ParseFromString(buffer1)
buffer2 = my_obj1.SerializeToString()

当我查看二进制数据时,我认为数据的顺序发生了变化。有什么方法可以 SerializeToString 但选择数据的顺序?

最佳答案

如 Protocol Buffer 文档中所述:

When a message is serialized, there is no guaranteed order for how its known or unknown fields will be written.

但是,如果您使用 Protocol Buffers 反序列化数据,这应该不是问题。如果您有一个自定义的解析算法来解析该数据,那么您可能想要改进算法以不关心顺序,或者使用 Protocol Buffers。

由于我这里没有更多信息,请让我知道如何更好地提供帮助。

关于python-3.x - 使用 Python 的 Protocol Buffer 选择使用 SerializeToString 的数据顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72523815/

相关文章:

c# - 如何序列化属性

android - 将序列化的接口(interface)对象从 Activity 解析为 fragment

c++ - 无法在 cmakelists.txt 中使用 protobuf

android - kapt 不解析 protobuf 生成的类

python-3.x - 公式缺少参数的 Statsmodels GLM 和 OLS

python-3.x - 使用 python 从 netcdf 绘制风向量

python - dict 子类中的自定义迭代行为

java - Serialized RDD如何在内存中占用更少的空间?

python - 如何在 Numpy 数组中设置单个索引

ruby - 从 Ruby 中编译的 protobuf 消息中获取枚举值