首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CapnProto最大文件大小

CapnProto最大文件大小
EN

Stack Overflow用户
提问于 2018-01-26 09:42:27
回答 1查看 995关注 0票数 2

目前,我们正在使用ProtocolBuffers在python和C++之间交换数据。但是,我们遇到了协议缓冲区的最大文件大小限制,并正在考虑将所有内容切换到Cap。但是,由于它在某种程度上与协议缓冲区有关,我想知道是否也有限制wrt的最大文件大小?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-28 23:10:36

Cap的最大文件大小约为2^64字节,或16个exbi字节--这“对任何人都足够了”。:)

Cap实际上是非常大的数据文件的优秀格式,因为它支持随机访问和延迟加载。当读取一个巨大的Cap文件时,我建议使用mmap()将文件映射到内存中,然后将字节直接传递给Cap实现(例如,capnp::FlatArrayMessageReader在C++中)。这样,只有您实际使用的文件页才会被操作系统带入内存。(相比之下,在使用协议缓冲区时,必须先将整个文件解析为内存中的数据结构,然后才能访问其中的任何一个。)

请注意,Cap结构中的单个List值的限制为2^29-1元素。TextData (字符串和字节blob )是特殊类型的列表,因此这意味着任何一个连续文本或字节blob仅限于512 to。但是,您可以有多个这样的块,因此可以通过将更大的数据分割成碎片来存储到单个文件中。

还请注意,在默认情况下,大多数Cap实现在读取Cap结构时施加了“遍历限制”,以抵御包含指针循环的恶意数据。通常,这将默认为64MiB。对于更大的数据,您需要覆盖C++中的限制,您需要将一个自定义ReaderOptions传递给MessageReader构造函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48458839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档