我们如何判断一个文件是否是protobuf序列化的?

pmv*_*mvp 5 protobuf-net

我想确定要反序列化的文件是否是 protobuf 序列化的。这是因为我想提供多个选项来为用户序列化和反序列化文件。我正在使用 protobuf.net 序列化为 protobuf 格式。

Mar*_*ell 3

不存在明确的 protobuf 标记,因此您所能做的就是测试某些东西是否可能是protobuf。您可以通过尝试反序列化(并注意失败)来做到这一点,或者简单地通过 ProtoReader API 运行它并查看它是否干净地运行到最后,也许使用 SkipField() (但是,如果您使用 SkipField(),则不是这样,有一些内部有效负载可以完全跳过 - 我可以构造一个示例,该示例在使用 SkipField() 时通过,但在正确反序列化时失败)。

由于您使用的是文件,因此您还可以使用文件扩展名作为附加提示。