Java 中 Protocol Buffers 分隔 I/O 函数的 C 等效项
在 Protocol Buffers 中,在消息之前添加长度前缀对于读取和发送消息至关重要从文件写入多条消息。虽然 Java 为此目的提供了“定界”I/O 函数(例如 parseDelimitedFrom、mergeDelimitedFrom、writeDelimitedTo),但 C 缺乏等效函数。
Google 推荐
Google 推荐在 C 中手动为消息附加长度前缀。这涉及到:
但是,这种方法缺乏优化,可能会失败输入大于 64MB。
优化的 C 实现
随后,前 Google protobuf 库作者开发并共享了优化的 C 实现。这些实现包括:
实现细节
writeDelimitedTo 函数为每条消息创建一个新的 CodedOutputStream 并使用 SerializeWithCachedSizes 方法将其序列化。如果消息适合一个缓冲区,则使用更快的 SerializeWithCachedSizesToArray 方法。
readDelimitedFrom 函数创建一个新的 CodedInputStream 并使用 PushLimit 方法对每条消息施加大小限制。然后,它使用 MergeFromCodedStream 方法解析消息并验证整个消息是否已被消耗。
可用性
这些优化的 C 实现不是官方 protobuf 库的一部分。但是,它们可以在各种第三方存储库中找到,或者使用提供的代码片段手动实现。
以上是如何在 C 中实现协议缓冲区定界 I/O:缺少的功能和潜在的优化的详细内容。更多信息请关注PHP中文网其他相关文章!