我们如何识别一个文件是否被 protobuf 序列化?

How can we identify if a file is protobuf serialized?

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

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

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