Protocol buffers 如何确定字符串是否为协议缓冲区对象

Protocol buffers 如何确定字符串是否为协议缓冲区对象,protocol-buffers,Protocol Buffers,我现在有一个存储纯字符串数据的位置,我希望将来在同一位置存储protobuf对象 我的新代码是否有办法读取旧数据(纯字符串)并可靠地确定:“这不是protobuf对象” 考虑到我无法从其他格式(可能有些协议缓冲区对象类似于主机名,可以是任何格式)可靠地确定当前纯字符串数据(例如主机名)的格式,这似乎不可行,对吗?您似乎还没有在该位置存储任何协议缓冲区数据。用特定的前缀标记新数据怎么样 例如,生成GUID或某个随机的64位值,并在存储protobuf消息时将其前置到数据。阅读时,只需检查此标记是否

我现在有一个存储纯字符串数据的位置,我希望将来在同一位置存储protobuf对象

我的新代码是否有办法读取旧数据(纯字符串)并可靠地确定:“这不是protobuf对象”


考虑到我无法从其他格式(可能有些协议缓冲区对象类似于主机名,可以是任何格式)可靠地确定当前纯字符串数据(例如主机名)的格式,这似乎不可行,对吗?

您似乎还没有在该位置存储任何协议缓冲区数据。用特定的前缀标记新数据怎么样

例如,生成GUID或某个随机的64位值,并在存储protobuf消息时将其前置到数据。阅读时,只需检查此标记是否存在


通过改变标记的长度,可以任意避免与现有数据的任何冲突。

字符串是ascii文本吗?PROTOBUF存储为二进制乱码,因此您应该能够相当容易地判断给定位置的位是否为ascii。不幸的是,字符串不是ascii。它的一部分只是一个C++ STD::字符串,它可以是任何东西。完整定义:您可以通过protobuf解析器运行数据以查看是否有错误来“有信心”完成此操作,但是:理论上总有可能偶然出现类似protobuf的情况,尤其是对于小序列(巧合的概率随长度而降低)。此外,零长度字符串在protobuf中是完全有效的,可能还有其他一些东西。@MarcGravel是的,我想理论上的可能性是我在这里担心的。我想我不能百分之百肯定。