我有一个用 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/