You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt的QCborStreamWriter中实现嵌套映射序列化?

解决QCborStreamWriter嵌套映射的写入问题

QCborStreamWriter是流式序列化工具,它不支持直接插入预构建的QCborMap对象,而是需要通过startMap()/endMap()、startArray()/endArray()这类方法逐层级构建嵌套结构,这样才能发挥它低内存占用、高效写入的优势,正好匹配你处理大数据的需求。

核心用法示例

下面是实现数组嵌套映射、映射嵌套多层结构的完整代码:

#include <QCborStreamWriter>
#include <QFile>

int main() {
    QFile file("data.cbor");
    if (!file.open(QIODevice::WriteOnly)) {
        return 1;
    }

    QCborStreamWriter writer(&file);

    // 写入一个包含嵌套映射的数组
    writer.startArray();

    // 第一个元素:简单键值对映射
    writer.startMap(2); // 提前指定键值对数量可提升写入效率,为可选参数
    writer.append("name");
    writer.append("Alice");
    writer.append("age");
    writer.append(30);
    writer.endMap();

    // 第二个元素:多层嵌套的映射结构
    writer.startMap();
    writer.append("user_details");
    // 嵌套子映射
    writer.startMap();
    writer.append("user_id");
    writer.append(1001);
    writer.append("labels");
    // 子映射内嵌套数组
    writer.startArray(3);
    writer.append("admin");
    writer.append("active");
    writer.append("verified");
    writer.endArray();
    writer.endMap();
    writer.endMap();

    writer.endArray();

    file.close();
    return 0;
}

关键注意事项

  • 严格层级对应:所有嵌套结构必须通过startXxx()开启,写入内容后用endXxx()闭合,层级不匹配会生成无效的CBOR数据。
  • 预指定元素数量:调用startMap(count)或startArray(count)时传入元素数量,能让writer预先分配空间,进一步提升大数据场景下的写入效率。
  • 内存与体积优势:相比QJsonDocument一次性构建完整DOM树,QCborStreamWriter边写边存,内存占用极低;同时CBOR格式本身比JSON更紧凑,文件体积会明显小于JSON输出。

内容的提问来源于stack exchange,提问作者Sylvain B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:20:53