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

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

公司安全软件导致部分应用无法正常运行的排查与解决方法许多公司为了保障内部网络安全,会部署安全软件。...

将姓名转换为数字以实现排序的解决方案在许多应用场景中,用户可能需要在群组中进行排序,尤其是在一个用...

在使用IntelliJIDEAUltimate版本启动Spring...

系统对接中的字段映射处理在进行系统对接时,常常会遇到一个棘手的问题:如何将A系统的接口字段有效地映�...

Java对象与数组的转换:深入探讨强制类型转换的风险与正确方法很多Java初学者会遇到将一个对象转换成数组的�...

在使用MyBatis-Plus或其他ORM框架进行数据库操作时,经常需要根据实体类的属性名构造查询条件。如果每次都手动...

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...

电商平台SKU和SPU表设计详解本文将探讨电商平台中SKU和SPU的数据库设计问题,特别是如何处理用户自定义销售属...
