我要将一些大的对象存储到数据库(BLOB)中。在我看来,protobuf 是序列化/反序列化 BLOB 的最佳候选之一。尽管它是二进制格式,但仍然很容易读取和更改其内容(字符串、整数等)。因此,我需要某种数据验证,无论是原始 BLOB 还是被黑客或太聪明的用户修改后的 BLOB。
一种可能的方法是在表中有一个专用字段,称为 crc,计算 BLOB 的校验和并将其放置在那里。但在许多情况下,如果 crc 是 BLOB 本身的一部分,则会更好。
我可以在 protobuf 流的末尾添加额外的字节,但我将不得不删除它们(或者反序列化器将抛出“无效字段 blablabla”的异常)。
我可以将 protobuf 流放入包装器中,但这又是一个解封装/封装的开销。
是否有一种简单、便宜的方法来在 protobuf 流的末尾添加一些东西,以避免在反序列化期间需要进行其他操作?在 XML 中,我可以添加注释。我不认为 protobuf 中有注释,但是如何添加 CRC,使其成为一个或两个字节的示例?
一种可能的方法是在表中有一个专用字段,称为 crc,计算 BLOB 的校验和并将其放置在那里。但在许多情况下,如果 crc 是 BLOB 本身的一部分,则会更好。
我可以在 protobuf 流的末尾添加额外的字节,但我将不得不删除它们(或者反序列化器将抛出“无效字段 blablabla”的异常)。
我可以将 protobuf 流放入包装器中,但这又是一个解封装/封装的开销。
是否有一种简单、便宜的方法来在 protobuf 流的末尾添加一些东西,以避免在反序列化期间需要进行其他操作?在 XML 中,我可以添加注释。我不认为 protobuf 中有注释,但是如何添加 CRC,使其成为一个或两个字节的示例?
XmlSerializer
中,制作继承的东西不是一个问题)。 - Sinatr